新手请教关于C++虚函数的问题

此去依然 2014-11-03 08:59:15
#include "stdafx.h"
#include <iostream>
using namespace std;
class A{
public:
virtual void print(){
cout << "A::print" << endl;
}
};
class B : public A{
public:
virtual void print(){
cout << "B::print" << endl;
}
};


int _tmain(int argc, _TCHAR* argv[])
{
A *pa = nullptr,*pb = nullptr;
A a;
B b;
pa = &a;
pb = &b;
pa->print();
pb->print();//调用A::print() 为什么看起来是矛盾的?
cin.get();
cin.get();
return 0;
}

A::print
B::print
关于C++中虚函数的问题,“根据基类指针或引用指向的对象类型决定调用基类还是派生类中的函数”这句话实际应用中没问题,但是为什么和书上的描述以及IDE上显示的实际调用看起来是矛盾的呢?

prime plus上也有这种前后矛盾的描述,有点没想明白,求指教。。。
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
此去依然 2014-11-03
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
我看不出有什么问题 A::print B::print 输出结果很正确。   pa = &a;     pb = &a;这里必成a     pa->print();     pb->print(); 你会看到pb输出A::print,这才是多态的意义。
我的意思是说由于虚函数的机制,pb指向的是B类对象b,那么执行B类中的print()函数,所以结果没问题,但是书上以及编辑器提示都显示是调用了A::print(),这和实际执行B::print()不是矛盾的吗,我有点没懂。 是因为这是动态联编的结果,所以编译之前看不到实际调用?
勤奋的小游侠 2014-11-03
  • 打赏
  • 举报
回复
我看不出有什么问题 A::print B::print 输出结果很正确。   pa = &a;     pb = &a;这里必成a     pa->print();     pb->print(); 你会看到pb输出A::print,这才是多态的意义。

64,654

社区成员

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

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