C++调用从基类派生的覆盖函数

标签 c++ function inheritance polymorphism virtual

我有 2 个类,AB,我需要在 B 中覆盖一个函数,以便从 A 调用code> 的构造函数。这是我已经拥有的:

class A {
    A(char* str) {
        this->foo();
    }

    virtual void foo(){}
}

class B : public A {
    B(char* str) : A(str) {}

    void foo(){
        //stuff here isn't being called
    }
}

如何从 A::A() 获取要在 B::foo() 中调用的代码?

最佳答案

I need an overwritten function in B to be called from A's constructor

这种设计在 C++ 中是不可能的:order of construction B 对象的构造是首先构造基类 A 子对象,然后在其之上构造 B。

结果是,在 A 构造函数中,你仍然在构造一个 A 对象:此时调用的任何虚函数都将是 A 的虚函数。只有当 A 构造完成并开始构造 B 时,才会B 的虚函数生效。

为了实现您想要的效果,您必须使用两步模式:1) 构建对象,2) 初始化它。

关于C++调用从基类派生的覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35373328/

相关文章:

java - JVM JIT 能否专门化子类中的非覆盖方法?

java - 对于带有继承的 @OneToMany Hibernate 映射,插入失败

c# - 编程语言/库如何与硬件通信?

function - Fortran 多态性、函数和分配

c++ - 如何在不使用变量 C/C++ 的情况下将常量数组文字传递给采用指针的函数?

c++ - 将任何派生类使用的函数放在基类中?

c++ - 带有 #include<iostream.h> 的程序允许使用 strlen() 等字符串函数。为什么?

配置从 Debug 更改为 Release 后,C++ exit(0) 不再立即存在我的程序

c++ - Erlang 和 C/C++ 线程

c++ - 复数 Gamma 函数