C++默认实参静态绑定
来源:互联网 发布:oracle sql连接字符串 编辑:程序博客网 时间:2024/05/17 05:51
C++中虚函数是动态绑定的(其它一般都是静态绑定的),但是如果其使用了默认实参,默认实参是静态绑定的。
这意味着如果使用基类指针访问子类对象的虚函数,默认实参由基类确定(即这种场合在声明子类虚函数时给定不同默认实参是徒劳的)。
#include <iostream>using namespace std;class B{public:void show(){cout<<"B show"<<endl;}virtual void test(int i=5) //注意:默认实参编译时确定{cout<<"B test i="<<i<<endl;}};class C: public B{public:virtual void test(double i){cout<<"C test i="<<i<<endl;}virtual void test(int i = 20) //注意:默认实参编译时确定{cout<<"C test i="<<i<<endl;}void show(){cout<<"C show"<<endl;}};int main(){C *pc = new C; //pc静态类型C*, 动态类型C*B *pb = pc; //pb静态类型B*, 动态类型C*pc->show();//show非虚函数,直接调用指针所指类型函数(属于隐藏,其实不用定义直接继承B的show也可用)pb->show();//show是非虚函数,直接调用指针所指类型函数pb->test();//test是虚函数,查看所指对象类型,pb所指类型与对象类型不一致,再看是否重写test,如重写调用对象函数,否则调所指类型函数(多态)pc->test();//test是虚函数,查看所指对象类型,pc所指类型与对象类型一致,调用所指类型函数;return 0;}
运行结果:
0 0
- C++默认实参静态绑定
- 动态绑定遇到默认实参
- [C++] 关于函数的默认实参
- C++Primer-虚函数与默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参
- 默认实参与显示实参
- c++默认实参 省略实参
- 立此存照(25)[C++]虚函数与默认实参
- [C++]静态绑定与动态绑定
- 【C++】静态绑定和动态绑定
- mysql计算时间差
- 并查集:poj2524:
- 单机程序修改log4j配置文件位置
- JSON互相转换的工具类
- POJ 1236 Network of Schools(强连通分量缩点+tarjan算法)
- C++默认实参静态绑定
- sublime 括号 彩色 提示
- C语言总结(一)
- 怎么把你计算机上的一个工程项目文件传到github网站上去
- 机器学习算法疗程(最优化)
- 无线传输距离计算公式
- Tomcat启动时间很久
- 函数指针复习
- ORA-01436: 用户数据中的 CONNECT BY 循环