为什么要在私有继承下覆盖
Why override under private inheritance?
class Base {
public:
virtual void f() {}
};
class Derived : private Base {
public:
void f() override {}
};
我的问题是这种覆盖有什么用吗?私有继承意味着不能将Derived
存储在指针Base
因此永远不需要将f
动态调度到正确的类型。
举个例子:Derived::f1()
函数可以调用Base::f2()
的(公共或受保护(函数,而又可以调用f()
。在这种情况下,需要动态调度。
下面是一个示例代码:
#include "iostream"
using namespace std;
class Base {
public:
virtual void f() {
cout << "Base::f() called.n";
}
void f2() {
f(); // Here, a dynamic dispatch is done!
}
};
class Derived:private Base {
public:
void f() override {
cout << "Derived::f() called.n";
}
void f1() {
Base::f2();
}
};
int main() {
Derived D;
D.f1();
Base B;
B.f2();
}
输出:
Derived::f() called
Base::f() called
相关文章:
- 继承、覆盖和虚函数,以避免重复代码
- 循环依赖,在继承类的情况下使用覆盖方法
- C++:覆盖类继承?
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- 关于继承和覆盖的问题
- 使用父类方法覆盖的多重继承
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- 三重继承,没有唯一的最终覆盖者
- 多重继承:调用所有覆盖的函数
- 在多级继承中重写,中间派生类未覆盖函数
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 继承覆盖
- 执行覆盖的继承函数
- 我们可以覆盖继承类中的纯虚函数吗?
- 覆盖和继承
- 需要有关多个继承和可选功能覆盖C 的建议
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 用方法覆盖的C 继承
- 是否可以从 C++11 智能指针继承并覆盖相关运算符?
- C++继承函数覆盖