据我所知,有些条件可能无法在子类上实现纯虚方法,但可以调用子类而不会导致构建错误。
我无法模拟这个。有人对如何实现这一点有任何见解吗?我已经做了很多搜索,但是还没有能够开启任何搜索。
答案 0 :(得分:6)
在基类的构造函数中调用虚函数时会发生。
#include <iostream>
class Base
{
public:
Base() { g();}
virtual ~Base() {}
void g() { f(); }
virtual void f() = 0;
};
class Derived : public Base
{
public:
Derived() : Base() {}
~Derived() {}
void f() { std::cout << "Derived f()" << std::endl; }
};
int main()
{
Derived d; // here we have the call to the pure virtual function
return 0;
}
编辑:
主要问题是:当构造Derived
对象时,对象以Base
开始,然后执行Base::Base
构造函数。由于该对象仍然是Base
,因此对f()
(通过g()
)的调用会调用Base::f
而不是Derived::f
。在Base::Base
构造函数完成后,对象变为Derived
并运行Derived::Derived
构造函数。