派生类赋值给基类指针,调用成员函数

[复制链接]
查看11 | 回复2 | 2008-7-30 09:38:40 | 显示全部楼层 |阅读模式
#include
using namespace std;
class A{
public:

int v;

void fun(){ coutfun();
}
int main(){

A a,*p;
B1 b1;
B2 b2;
D1 d1;
cout<<"==============p=============="<<endl;
p=&a;
f(p);
p=&b1;
f(p); //应该调用B1.fun(),可是执行时是A.fun(),

//这是什么原因 ?
p=&d1;
f(p);
cout<<"============================"<<endl;
return 0;
}

回复

使用道具 举报

千问 | 2008-7-30 09:38:40 | 显示全部楼层
按照fun的声明,它的信息是不会被记录在类型实例里面的,因此派生出来的类实例化后,实体中并没有foo的相关信息,当然被重定义的fun函数也就不会被调用到了。而f函数中的所用指针的类型型为A*,所以就会调用A::fun()。加上virtual就可以得到你想要的结果了。class A{
// ...
virtual void fun(){ cout<<"Member of A:"<<v<<endl;}
// ....};
回复

使用道具 举报

千问 | 2008-7-30 09:38:40 | 显示全部楼层
要在基类的fun函数上加上 virtual 关键字 应该就可以了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行