在以下情况下,我有一个带有纯虚函数MyBaseClass的基类void foo() = 0;。两个类MyClassAMyClassB从该类MyBaseClass派生。两者都实现功能foo()
现在在我从事的项目中,我遇到了一个从类MyBaseClass创建的对象,在该类上调用了函数foo()
有趣的是,使用的是MyClassB中的实现。
在哪里定义的是此实现而不是MyClassA中的实现

最佳答案

该对象的类型为MyClassB而不是MyBaseClassMyBaseClass是抽象的,无法实例化。但是,您可能有一个指向MyBaseClass*实例的指针MyClassB

如果需要更多信息,您可能应该阅读C ++中的继承和多态性。

MyBaseClass base; // Compiler error, cannot instantiate abstract class
MyClassA a;
MyClassB b;

MyBaseClass* pA = &a;
MyBaseClass* pB = &b;

pA->foo(); // Uses implementation of foo in MyClassA
pB->foo(); // Uses implementation of foo in MyClassB

关于c++ - 在C++中实现纯虚函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18142595/

10-12 22:31