在以下情况下,我有一个带有纯虚函数MyBaseClass
的基类void foo() = 0;
。两个类MyClassA
和MyClassB
从该类MyBaseClass
派生。两者都实现功能foo()
。
现在在我从事的项目中,我遇到了一个从类MyBaseClass
创建的对象,在该类上调用了函数foo()
。
有趣的是,使用的是MyClassB
中的实现。
在哪里定义的是此实现而不是MyClassA
中的实现
最佳答案
该对象的类型为MyClassB
而不是MyBaseClass
。 MyBaseClass
是抽象的,无法实例化。但是,您可能有一个指向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/