这里虚函数为什么输出2

loooool 2007-05-10 02:31:51
#include <iostream>
using namespace std;

class base
{
public:
virtual fun(){cout << 1;};
};
class derived : public base
{
public:
fun(){cout << 2;};
};

void main()
{
base b;
derived *dp;

dp=(derived*) &b;
dp->fun();
}

为什么输出2
...全文
259 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
isarc 2007-05-11
  • 打赏
  • 举报
回复
mark,有收获。
xxyifan 2007-05-10
  • 打赏
  • 举报
回复
虚假函数表里的指针指向什么就会输出什么,另外,你不能指往这个指针指向对象中没有的东西,这里dp指向是基类对象,如果用多态,就用基类的指针指向子类的对象
minioreo 2007-05-10
  • 打赏
  • 举报
回复
指针指向什么对象就调用什么对象的函数 虚函数的用法
expter 2007-05-10
  • 打赏
  • 举报
回复
1撒

因为dp的地址是指向b..
yzcurry 2007-05-10
  • 打赏
  • 举报
回复
这是对的,因为你dp只是引用了一下b,而b是base的一个对象,你说这个结果是什么?
xgbing 2007-05-10
  • 打赏
  • 举报
回复
输出1就对了
loooool 2007-05-10
  • 打赏
  • 举报
回复
sorry,我是搂主,打错了,应该是输出1
我用vc6的编译器没有抱错,有一个警告。

如果按照虚函数的说法这里不是应该输出2吗?
redex 2007-05-10
  • 打赏
  • 举报
回复
gcc 3.4.6 输出1

楼主是不是在开玩笑?? 首先这个程序就编译通不过.
believefym 2007-05-10
  • 打赏
  • 举报
回复
这个例子跟虚函数、多态没有关系

多态、输出2:
base *b = new derived;
b->fun();
believefym 2007-05-10
  • 打赏
  • 举报
回复
vs2005输出1
楼主用的什么编译器,fun没有返回类型都能编译通过?

65,210

社区成员

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

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