【发布时间】:2020-06-24 11:09:41
【问题描述】:
想象一个包含许多继承的庞大代码库。在某些时候,您必须使用的课程中出现了一条线。
inherited::Load();
这就是按照它说的去做。它将基础对象加载到内存中。
inherited 是基类的 typedef。
但是实际的父类没有 Load 方法。
举个简单的例子:
class Base {
public:
Base() {};
void Load() {
cout << "Base ok" << endl;
}
};
class Derived : public Base {
public:
Derived() {};
};
class MostDerived : public Derived {
public:
MostDerived(){};
void Load() {
Derived::Load();
cout << "Child ok"<< endl;
}
};
这里,如果我们调用MostDerived.Load(),它会调用其父类的Load方法,但Derived类没有自己的Load,只有Base的Load方法。
这里到底发生了什么?为什么没有编译问题? Derived 类是否复制了基类的所有方法,所以它会有一个 Load 方法什么是打印“Base ok”?还是 Derived 只是简单地调用了 Base 方法?
我发现了一个相关的问题Do ALL virtual functions need to be implemented in derived classes?,答案是这样的
它从其祖先类继承 bar 实现。
对我来说,它仍然怀念显式调用 Derived::Load() 方法有效。但是,只有一个 Base::Load() 方法存在。
【问题讨论】:
-
Derived确实有一个Load方法,该方法继承自Base -
请记住,继承是一种“是”的关系。
MostDerived是一个Derived,而Derived是一个Base,这也意味着MostDerived是一个基`. -
@Someprogrammerdude 是的,init 应该是 Load。感谢您指出 - 已编辑
标签: c++ oop inheritance