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