覆盖另一个方法所使用的超类回调函数[C++]。

问题描述 投票:0回答:1

这里有一个非常类似的问题。C++: 覆盖一个被另一个方法调用的保护方法。

但是,我想知道如何在Base类中重写一个回调函数,使另一个方法可以从构造函数中调用派生类的回调,而不是Base类的回调。

我在下面给出了一个例子。

#include <iostream>

class Base {
    protected:
        virtual void callback() {
            std::cout << "Base" << std::endl;
        }   

    public:
        Base() {
            callback();
        }
};


class Derived : Base {
    protected:
        void callback() override { 
            std::cout << "Derived" << std::endl;
        }

    public:
        // Use Base's constructor to call print
        Derived() : Base() {  }
};

int main() {

    Base B; 
    Derived D;

    return 0;
}

输出是:

Base
Base

但我希望输出是:

Base
Derived
c++ oop constructor callback polymorphism
1个回答
1
投票

这是不可能的。你可以在下面看到解释 此职位.

对象是由基类向上构造的。基类首先被构造,然后派生类的成员扩展覆盖基类。所以当基类构造函数运行时,派生类的成员还不存在,所以你不能调用它们。

不知道你需要这个干什么,但是你可以从派生类中再次调用相同的方法,你应该可以看到两次调用的输出(从基类和派生类)。

© www.soinside.com 2019 - 2024. All rights reserved.