环境: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是多余的,不用考虑。(误导)
总结:当派生类之间之间进行赋值的时候,只会改变基类的内容,因为派生类是从基类继承的,而本身的不会因此改变,仍保留。