派生类虚函数调用基类版本
2017-02-04 14:47
211 查看
#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
相关文章推荐
- [vijos1426] 兴奋剂检查
- 故障处理-数据库本地磁盘100%,之后集群状态异常
- 最强势就业形势分析,助攻“金三银四”求职季
- 2017 “看的见”自己
- NodeJS学习笔记三
- 在NodeJs中使用jQuery?
- dpdk简介
- Cocos2d中JniHelper获取JNIENV及C++与Java间类型转换
- jquery设置disabled属性的方法
- C++ 并发编程的一种思维
- slf4j-api、slf4j-log4j12以及log4j之间什么关系?
- Oulipo POJ - 3461
- (转)海外基金销售新模式 机器人投顾与人工相结合
- tx一卡通复制上月排餐误点月份从备份里出排餐表查找的网络资料
- 如何切换到root账户自动登录
- Linux内核使用位图为进程分配pid
- php写一个操作mysql的类
- 函数式编程
- 2017《面向对象程序设计》寒假作业二(三)
- rsync实现文件备份同步