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

时间:2022-09-07 19:29:31

环境: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;
}


 

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

 

运行效果截图:

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

 

 

分析:

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是多余的,不用考虑。(误导)

 

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