给定以下场景,我有一个基类 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/