如何在派生类中不显式调用base::func()的情况下从基类执行虚拟函数

How to execute a virtual function from a base class without the explicit call of Base::func() in a derived class?

本文关键字:func 情况下 函数 虚拟 执行 基类 base 派生 调用      更新时间:2023-10-16

我是C++的新手,有一个问题。我在谷歌上找不到任何与这个问题相关的东西。

在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; }  
};  

当从Derived调用函数func时,输出应如下:

Base func()  
Derived func()

这在C++中可能吗?或者,还有其他方法可以实现这种行为吗?

在C++中这种意图可能吗?或者有其他方法可以在C++中实现这种行为吗?

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

Base::func();

在CCD_ 4。该语言没有提供一种机制来自动实现这一点。

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

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; }  
};

您必须在派生类实现中调用基类才能实现

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; 
}  
}; 

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

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