如何在没有派生类中显式调用Base :: func()的情况下从基类执行虚函数?

时间:2018-07-12 21:44:00

标签: c++

我是C ++的新手,有一个问题。我在Google上找不到与此问题相关的任何内容。

在C ++中,是否可以从基类中调用虚拟函数中的代码,而无需在派生类中使用Base::func()来调用它?

这是我的意思的示例:

class Base {  
public:  
    virtual void func(void) { cout << "Base func()" << endl; }  
};

class Derived : Base {  
public:  
    virtual void func(void) { cout << "Derived func()" << endl; }  
};  

func调用函数Derived时,输出应为以下内容:

Base func()  
Derived func()

这在C ++中甚至可能吗?或者,还有另一种方法来实现此行为吗?

3 个答案:

答案 0 :(得分:4)

  

这种意图在C ++中甚至可能吗?还是有其他方法可以在C ++中实现此行为?

只有添加后,您才能获得该行为

Base::func();

Derived::func()的实现中。该语言没有提供使之自动化的机制。

答案 1 :(得分:2)

您可以通过使接口成为非虚拟接口来使基类首先获得调用,然后从那里调用(私有)派生函数:

class Base {  
public:  
    void func()
    {
        cout << "Base func()" << endl;

        derived_func();
    }

private:
    virtual void derived_func() { }

};

class Derived : Base {  
private:  
    virtual void derived_func() { cout << "Derived func()" << endl; }  
};

答案 2 :(得分:0)

您已在派生类实现中调用基类以实现此目的

class Base {  
public:  
    virtual void func(void) { cout << "Base func()" << endl; }  
};

class Derived : Base {  
public:  
    virtual void func(void) 
    { 
        Base::function();
        cout << "Derived func()" << endl; 
    }  
}; 

但这仍然从Base::func()调用Derived::func()

但是,如果func()实际上是您的构造函数,则可以实现所需的