C++中派生类之间的赋值对基类的影响

环境:VS2010

代码:

#include <iostream> using namespace std; class A { public: A() { a = 0; cout<<"A::A()"<<endl; } int a; }; class B:public A { public: B() { i=1; cout<<"B::B()"<<endl; } int i; }; class C:public A { public: C() { m=2; cout<<"C::C()"<<endl; } void Print(){ cout<<a<<", "<<m<<endl; } public: int m; }; int main(void){ C c1; C c2; c2.a = 111; c2.m = 222; A *pa1 = &c1; A *pa2 = &c2; *pa1 = *pa2; c1.Print(); c2.Print(); return 0; }


读者可以先考虑输出结果。

运行效果截图:

分析:

A *pa1 = &c1; A *pa2 = &c2;*pa1 = *pa2; 这三句话表示类c2赋值给c1,因为C从A继承,所以c2赋值给c1后A的属性发生了修改,但它c1本身的内容不会因此发生改变,所以第一句输出是111(c2的a赋值给c1的a),2(c1的m).第二句打印相信大家都清楚,这里不赘述。

注:这里类B是多余的,不用考虑。(误导)

总结:当派生类之间之间进行赋值的时候,只会改变基类的内容,因为派生类是从基类继承的,而本身的不会因此改变,仍保留。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值