|
#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 为什么呢?谢谢各位! |
|
|
|
顶一下!
|
|
|
想了半天
觉得不好理解 因为好象两种都可以理解 但是,具体原因 关注 |
|
|
int main(){
CD dd(1); //CB aa,*bb=ⅆ 没有用 CD dd1; dd1=dd; cout<<dd1.a<<endl; return 0; } |
|
|
由于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) |
|
|
哦,原来如此
我也明白了 楼主明白了吧? 谢谢楼上 不过,CB *bb=ⅆ 一句我认为没有用 要说匹配的话,不用它照样可以的 |
|
|
楼上说得不错。在定义的虚运算符中已经定义了运算符的类型。当没有找到相应的类型,就会出现后一种情况。
|
|