现在的位置: 首页 > 综合 > 正文

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

2013年01月08日 ⁄ 综合 ⁄ 共 609字 ⁄ 字号 评论关闭

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

 

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

 

 

抱歉!评论已关闭.