`
lovnet
  • 浏览: 6704232 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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

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

分享到:
评论

相关推荐

    C#中派生类调用基类构造函数用法分析

    主要介绍了C#中派生类调用基类构造函数用法,实例分析了派生类调用基类构造函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    深入解析C++中派生类的构造函数

    主要介绍了深入解析C++中派生类的构造函数,是C++入门学习中的基础知识,需要的朋友可以参考下

    浅谈C++中派生类对象的内存布局

    下面小编就为大家带来一篇浅谈C++中派生类对象的内存布局。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    解析C++中派生的概念以及派生类成员的访问属性

    主要介绍了解析C++中派生的概念以及派生类成员的访问属性,是C++入门学习中的基础知识,需要的朋友可以参考下

    C++实验五.docx

    1 、先定义一个学生类student,其私有成员分别为(学号、生名、性别)3个,再定义一个研究生类graduate(私有成员分别为:学号、生名、性别、年龄、地址)5个。其中研究生类从学生类继承过来,分别采用公有继承与私有...

    继承与派生声明一个哺乳动物类声明一个shap(形状)基类,

    (2)、声明一个shap(形状)基类,他有两个派生类:Circle(圆)和square(正方形),要求(1)根据给出的正方形中心坐标计算圆的面积,(2)根据给出的正方形中点坐标和一个顶点坐标计算出该正方形面积。

    C++课程实验五代码大全.zip

    1 、先定义一个学生类student,其私有成员分别为(学号、生名、性别)3个,再定义一个研究生类graduate(私有成员分别为:学号、生名、性别、年龄、地址)5个。其中研究生类从学生类继承过来,分别采用公有继承与私有...

    彻底搞懂python继承

    在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。如果需要在派生类中调用基类的方法,可以使用内置函数super()或者通过...

    C++ 人事管理系统(实验)

    ⑸从Graduate类和Teacher类派生出助教生类TA,无新的属性。设计该类时注意虚基类的使用,注意重载相应的成员函数。 二、要求: 1.用多文件方式编程(建立工程),共有6个类(6个cpp,6个h),加上main,共13个文件 2...

    C++实现人事管理实验报告

    ⑸从Graduate类和Teacher类派生出助教生类TA,无新的属性。设计该类时注意虚基类的使用,注意重载相应的成员函数。 ⑹编写main函数测试这些类。在main函数中设计测试用例时,注意考虑如何体现成员函数的覆盖。 编程...

    c/c++ 人事管理系统

    从student类中派生出graduate(研究生)类,添加属性:专业,导师(为教师类); 添加[取得教师]方法(返回值为teacher类) (3) 对People类重载”==”运算符和”=”运算符,”==”运算符判断两个People类对象...

    由Person类派生出学生类Student和教师类Teacher

    由Person类派生出学生类Student和教师类Teacher,并为他们添加必要的数据,为这两个派生类编写必要的构造函数和析构函数。然后编写一个主函数对以上功能进行测试。 包括了很多的程序可供您参考!

    C++课程设计

    从circle类中派生出sphere类和column类,在两个派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的表面积及体积。 第二题:设计任务 程序设计题:定义一个复数类,通过重载运算符, 直接实现两个复数...

    《面向对象c++》课程设计

    (5)从student类中派生出研究生(graduate)类,添加属性:专业 char subject[21]、导师 teacher_adviser; (6)从graduate类和teacher 类派生TA(助教)类,注意使用虚基类; (7)实现学生选课管理系统。...

    ASP.NET基于WEB的选课系统(源代码+论文+开题报告+外文翻译+任务书+答辩PPT)

    C# 是由Microsoft开发的一种新型编程语言,由于它是从C和C++ 中派生出来的,因此具有C++的功能。同时,由于是Microsoft公司的产品,它又同 VB一样简单。对于web开发而言,C#像 Java,同时具有Delphi的一些优点。C#...

Global site tag (gtag.js) - Google Analytics