0

据我了解,在某些情况下,可能无法在子类上实现纯虚拟方法,但可以在没有它的情况下调用子类,从而导致构建错误。

我无法模拟这个。有人对如何实现这一点有任何见解吗?我已经进行了多次搜索,但无法找到任何东西。

4

1 回答 1

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构造对象时,对象以 a 开头Base,然后Base::Base执行构造函数。由于对象仍然是 a Base,对f()(via g()) 的调用调用Base::f而不是Derived::f。构造函数完成后Base::Base,对象变为 aDerivedDerived::Derived运行构造函数。

于 2013-10-15T11:54:07.553 回答