c++ - 派生类对象构造后调用虚函数

标签 c++ constructor polymorphism

下面是一些示例代码:

#include <iostream>

class A {
public:
    virtual void foo() {
        std::cout << "base" << std::endl;
    }

    A() {
        foo();
    }
};

class B : public A {
    int a;
public:
    void foo() {
        std::cout << "derived" << std::endl;
    }

    B(int a) :
        a(a) {}
};

int main() {
    B o(1);
    return 0;
}

我希望每次构造一些 A 派生对象时调用 foo()。我不想在每个派生类构造函数中显式调用 foo()

有没有办法以某种优雅的方式做到这一点?

最佳答案

无论您做什么,都无法从基类构造函数中调用重写的 foo()。当调用基类构造函数时,派生类对象还没有构造,因此您不能调用它的任何方法或访问它的任何成员。虚函数和常规函数也是如此。在基类构造函数中,this 指针指向基类,而不是派生类。

关于c++ - 派生类对象构造后调用虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072976/

相关文章:

c++ - 具有默认值的构造函数和不同的构造函数

c++ - 是否可以在 C++ 中进行多态成员重载?

haskell - 什么是单态性限制?

c++ - 将类的方法作为 friend

c++ - 如何在 C++ 头文件中定义字符串参数 - 与 Swift 桥接?

c++ - 我的数字一直在四舍五入?

Python:声明构造函数的灵活方式

c++ - 游戏的跨平台声音 API?

java - 对 Java 中对象和属性的基本误解

C++ 虚拟继承和构造函数