我是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 ++中甚至可能吗?或者,还有另一种方法来实现此行为吗?
答案 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()
实际上是您的构造函数,则可以实现所需的 。