派生类虚函数调用基类版本
来源:互联网 发布:centos 打不了中文 编辑:程序博客网 时间:2024/05/17 07:04
#include <iostream>using namespace std;class Base{public: virtual void foo(void) { std::cout << "Base::foo()" << std::endl; } virtual void doo(void) { std::cout << "Base::doo()" << std::endl; }};class Derived: public Base{public: void foo(void) { //foo(); // 错误。递归调用自己,即 Derived::foo() Base::foo(); // 明确告诉编译器,调用的是 Base::foo(), 而不是自己 std::cout << "Derived::foo()" << std::endl; } virtual void doo(void) { Base::doo(); std::cout << "Derived::doo()" << std::endl; }};class Derived2 : public Derived{ virtual void doo(void) { Derived::doo(); std::cout << "Derived2::doo()" << std::endl; }};class Derived3 : public Derived2{ virtual void foo(void) { Derived2::foo(); std::cout << "Derived3::foo()" << std::endl; }};int main(/* int argc, char *argv[] */){ Derived3 *d = new Derived3; Base *b = d; b->foo(); cout << "------------------------" << endl; b->doo(); b = nullptr; delete d; d = nullptr; return 0;}
程序输出:
结论:
1.派生类虚函数调用基类版本时,必须显式使用作用域操作符。
2.多态时,在虚函数继承链上,如果某个子类没有覆盖虚函数,则调用亲缘最近的父类版本。最佳做法,还是每个子类都实现。
参考资料:
1.派生类虚函数调用基类版本
http://blog.csdn.net/glx2012/article/details/8254623
0 0
- 派生类虚函数调用基类版本
- 派生类虚函数调用基类版本
- C++ 基类调用派生类非虚函数
- C++ 虚函数 派生类的调用
- 虚函数调用时一点注意,调用基类函数时调用派生类函数
- 抽象类 纯虚函数 虚函数 派生类 派生类对象 基类对象 ——调用顺序,用基类调用派生类的方法
- C++派生类函数调用基类的函数
- C++虚函数的陷阱--派生类对象的基类函数调用基类虚函数出错
- c++,派生类无法调用基类构造函数
- 派生类调用基类的构造函数
- 派生类中调用基类的构造函数
- C++派生类与基类构造函数调用次序
- 基类与派生类的构造函数调用问题
- C++基类与派生类的函数调用情况
- 派生类和基类的函数调用
- C++基类与派生类的函数调用情况
- 派生类构造函数的调用顺序
- 虚基类和派生类的函数调用
- iOS 证书申请和使用详解(详细版)
- 字典树——字典树树模板
- 截取Chrome下载的mp3
- Spring AOP
- SQLite自定义聚合函数 [类似MAX(field)]
- 派生类虚函数调用基类版本
- Android onCreate 详解
- [poj3691] DNA repair
- android如何实现特效
- Android MVP 实例
- 晃晃悠悠的2016,我不愿提、不愿想;简单思维的我,心将该去何方
- 项目版本号
- 【Linux/安卓+SPI以太网项目】
- 【IO】程序访问文件的几种方式