简单的继承和多态问题???

hujingshuang 2017-08-25 03:28:37
简单的继承和多态问题,代码如下:
#include <iostream>

using namespace std;

class A {
public:
virtual void fun(int a = 2) { // 添加了virtual关键字
cout << a << endl;
}
};

class B : public A {
public:
void fun(int b = 1) {
cout << b << endl;
}
};

int main() {

A* a = new B();
a->fun();

return 0;
}

疑问:
1、为什么上述代码的输出结果是:2? —— 这个怎么解释,什么机制???
2、如果不添加virtual关键字,上述代码输出结果也是:2。 —— 这个倒是可以理解。
...全文
161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
_Mia_ 2017-08-25
  • 打赏
  • 举报
回复
你的指针是A类型的然后指向B的一段新内存,所以在出现赋值时参数缺省直接用a的值
Chen_QiDian 2017-08-25
  • 打赏
  • 举报
回复
虚函数是动态绑定的,但是为了执行效率,缺省参数是静态绑定的。 也就是 指针是哪种类型,就调用该类型对应的类中,该函数定义时的缺省值。
sdghchj 2017-08-25
  • 打赏
  • 举报
回复
默认值是在编译期间使用的,当编译器看到一个函数调用中的某个参数缺失了,它就会用默认提供的值来替换
真相重于对错 2017-08-25
  • 打赏
  • 举报
回复
你把那个函数各加一句 virtual void fun(int a = 2) { // 添加了virtual关键字 cout<<"A"<<endl; cout << a << endl; } void fun(int a = 2) { // 添加了virtual关键字 cout<<"B"<<endl; cout << a << endl; }

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧