赋值操作符重载虚函数?

Roland2Dragon 2003-10-19 12:32:28
我写了下面的程序:
#include <iostream.h>
class CB{
public:
int a;
CB():a(0){};
CB(int aa):a(aa){};
virtual CB& operator=(CB& s){
cout<<"CB"<<endl;
a=s.a;
return *this;
}
};
class CD:public CB{
public:
CD(){};
CD(int bb):CB(bb){};
CB& operator=(CB& s){
cout<<"CD"<<endl;
a=s.a;
return *this;
}
};
当main函数为
int main(){
CD dd(1);
CB *bb=ⅆ
CD dd1;
dd1=*bb;
cout<<dd1.a<<endl;
return 0;
}
执行结果为:
CD
1
这没问题,与预想一样,但是当main函数为
int main(){
CD dd(1);
CB aa,*bb=ⅆ
CD dd1;
dd1=dd;
cout<<dd1.a<<endl;
return 0;
}
执行结果竟然是:
CB
1
而预想的应该是
CD
1

为什么呢?谢谢各位!
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoSurrender 2003-10-19
  • 打赏
  • 举报
回复
楼上说得不错。在定义的虚运算符中已经定义了运算符的类型。当没有找到相应的类型,就会出现后一种情况。
David2008 2003-10-19
  • 打赏
  • 举报
回复
哦,原来如此
我也明白了
楼主明白了吧?
谢谢楼上


不过,CB *bb=ⅆ 一句我认为没有用
要说匹配的话,不用它照样可以的

tuxw 2003-10-19
  • 打赏
  • 举报
回复
由于CD中并没有函数 CD& operator=(CD &s) 这样的函数,所以
dd1 = dd; 这句在CD中找不到匹配的函数,从而调用基类的CB& operator=(CB& s)

而前一个 main
CD dd(1);
CB *bb=ⅆ
CD dd1;

dd1=*bb; 由于bb是个CB的指针,可以匹配 CB& operator=(CB& s)

David2008 2003-10-19
  • 打赏
  • 举报
回复
int main(){
CD dd(1);
//CB aa,*bb=ⅆ 没有用
CD dd1;
dd1=dd;
cout<<dd1.a<<endl;
return 0;
}
David2008 2003-10-19
  • 打赏
  • 举报
回复
想了半天
觉得不好理解
因为好象两种都可以理解
但是,具体原因
关注
Roland2Dragon 2003-10-19
  • 打赏
  • 举报
回复
顶一下!

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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