我想请问一个c++对象的问题

来源:百度知道 编辑:UC知道 时间:2024/06/12 16:49:56
有class A,class B:public Aclass C:public B
这时用C构造一个对象c ,C c,同时会调用类B和A的构造函数,也就是c对象包含a和b,
然后要是再用A a构造一个A的对象,此时岂不是内存中有两份a对象
帮我解释一下好吗

这个问题我来帮你解释一下,首先来讲继承,此处的public继承得到了是派生类继承父类中的成员,也就是说父类是派生类成员中的一部分,从这个概念上讲,你定义的C c中的a与你定义的A a是不矛盾的,前者中的a是c中的一部分,不能称之为对象,也不能称之为a,后者a的才能成为对象
这里说到底是一个类型的关系,也就是说c就是c,他只包含具有A,B累结构的数据组成部分但并不是a,b;所以说你的理解是错误的

只会构造继承的部分,不会构造全部的,就像你出生(构造)的时候你继承你父母(基类)的一些特征,你能说世界(内存)上有两个你的父母么?

c中只包含一份a成员,
c对象的内存分布图为:
---------------—
|a对象的成员
---------------—
|b对象中非a的成员
---------------—
|c对象中非b的成员
---------------—

/*
然后要是再用A a构造一个A的对象,此时岂不是内存中有两份a对象。。
*/
注意:构造函数调用时,内存已经分配完毕。

要是再用A a构造一个A的对象,内存中就有三份a对象
如果这样
A arrayA[10];
内存中就有10份A对象

其实,int a; a也是对象,int也是类,不用看得过于神秘的

你的理解是对的,这就像你定义了两个变量一样:
int m;
int n;
虽然m n都是int类型的,但它们是不同的。

一个对象即是一个实例,是世界中唯一存在的.但在继承机制中,c对象与a对象之间是存在一定联系的,即c对象中的一些成员与a对象中的一些成员是相同的.但它们相同的成员的值是不相同的.所以这两个对象是完全不同的,更不像你所说的内存中有两份a 的对象.