在C ++中捕获未实现的纯虚拟

时间:2013-10-15 10:53:17

标签: c++ pure-virtual

据我所知,有些条件可能无法在子类上实现纯虚方法,但可以调用子类而不会导致构建错误。

我无法模拟这个。有人对如何实现这一点有任何见解吗?我已经做了很多搜索,但是还没有能够开启任何搜索。

1 个答案:

答案 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构造函数。