据我了解,在某些情况下,可能无法在子类上实现纯虚拟方法,但可以在没有它的情况下调用子类,从而导致构建错误。
我无法模拟这个。有人对如何实现这一点有任何见解吗?我已经进行了多次搜索,但无法找到任何东西。
据我了解,在某些情况下,可能无法在子类上实现纯虚拟方法,但可以在没有它的情况下调用子类,从而导致构建错误。
我无法模拟这个。有人对如何实现这一点有任何见解吗?我已经进行了多次搜索,但无法找到任何东西。
它发生在基类的构造函数中调用虚函数时。
#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
构造对象时,对象以 a 开头Base
,然后Base::Base
执行构造函数。由于对象仍然是 a Base
,对f()
(via g()
) 的调用调用Base::f
而不是Derived::f
。构造函数完成后Base::Base
,对象变为 aDerived
并Derived::Derived
运行构造函数。