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

C++ 捕获C+中未实现的纯虚拟+;,c++,pure-virtual,C++,Pure Virtual,据我所知,在某些情况下,可能无法在子类上实现纯虚拟方法,但可以调用子类,而不会导致生成错误 我无法模拟这个。有人知道如何做到这一点吗?我已经做了很多搜索,但是没有找到任何结果。当在基类的构造函数中调用虚函数时,就会出现这种情况 #include <iostream> class Base { public: Base() { g();} virtual ~Base() {} void g() { f(); } virtual void f() =

据我所知,在某些情况下,可能无法在子类上实现纯虚拟方法,但可以调用子类,而不会导致生成错误


我无法模拟这个。有人知道如何做到这一点吗?我已经做了很多搜索,但是没有找到任何结果。

当在基类的构造函数中调用虚函数时,就会出现这种情况

#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;
}
#包括
阶级基础
{
公众:
Base(){g();}
虚拟~Base(){}
void g(){f();}
虚空f()=0;
};
派生类:公共基
{
公众:
派生():基(){}
~Derived(){}

void f(){std::cout在基类的构造函数中调用虚函数时发生

#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;
}
#包括
阶级基础
{
公众:
Base(){g();}
虚拟~Base(){}
void g(){f();}
虚空f()=0;
};
派生类:公共基
{
公众:
派生():基(){}
~Derived(){}

void f(){std::cout在构造函数中调用虚拟函数不是一个好主意吗?@Pradheep当然,这是一个否定的答案。但上面的例子就是做错了。@Pradheep-在构造函数(或析构函数)中调用虚拟函数没有错。“规则”这不是一个好主意,因为有些人不明白这种调用是如何工作的。它调用为其构造函数(或析构函数)的类型定义的版本当前正在运行,这不一定是最派生的类型。@PeteBecker感谢您的解释。现在我更好地理解了它。感谢您的回答。我认为这是一个问题,包括没有实际实现纯虚拟。难怪我自己不能引发错误:它必须从b的构造函数的方法调用以此类推。只有这样,我才能在二十四小时内得到一个模糊的C行为的答案。在构造函数内调用虚拟函数不是一个好主意吗?@Pradheep当然,这是一个否定的。但上面的例子就是做错了。@Pradheep-在构造函数(或析构函数)内调用虚拟函数没有什么错这是一个坏主意的“规则”来自于不了解这种调用如何工作的人。它调用为其构造函数(或析构函数)的类型定义的版本当前正在运行,这不一定是最派生的类型。@PeteBecker感谢您的解释。现在我更好地理解了它。感谢您的回答。我认为这是一个问题,包括没有实际实现纯虚拟。难怪我自己不能引发错误:它必须从b的构造函数的方法调用只有这样,我才能在二十四小时内得到一个模糊的C行为的答案。