
新人提问:派生类对象与组合类对象,,还有它们的内存分配问题。
派生类创建对象后:1:派生类创建对象后调用了基类的构造函数,是不是意味着创建派生类对象的同时也创建了基类的对象。如果是,这两对象什么关系,内存中如何分配,如果不是那如何解...
派生类创建对象后:
1:派生类创建对象后调用了基类的构造函数,是不是意味着创建派生类对象的同时也创建了基类的对象。如果是,这两对象什么关系,内存中如何分配,如果不是那如何解释调用基类构造函数的事?
2:派生类对象在内存中包不包含基类的私有变量?
3:组合类对象和派生类对象在内存上有什么不同?
~~新人真心求问~~求教高人解答!!!!帮忙回答好了一定追加分呃 展开
1:派生类创建对象后调用了基类的构造函数,是不是意味着创建派生类对象的同时也创建了基类的对象。如果是,这两对象什么关系,内存中如何分配,如果不是那如何解释调用基类构造函数的事?
2:派生类对象在内存中包不包含基类的私有变量?
3:组合类对象和派生类对象在内存上有什么不同?
~~新人真心求问~~求教高人解答!!!!帮忙回答好了一定追加分呃 展开
展开全部
1:派生类创建对象后调用了基类的构造函数,不是创建派生类对象的同时也创建了基类的对象。而是创建派生类对象时调用基类的构造函数对派生类中所继承自基类的部分初始化。
2:派生类对象在内存中包含基类的私有变量,只是不能直接访问。
3:从代码共享的角度看,组合类对象和派生类对象没有什么本质的不同,不同的是它们所表达的事物之间的逻辑关系:组合类对象一般表示“整体-部分”关系,而派生类对象一般表达“一般-具体”关系。
2:派生类对象在内存中包含基类的私有变量,只是不能直接访问。
3:从代码共享的角度看,组合类对象和派生类对象没有什么本质的不同,不同的是它们所表达的事物之间的逻辑关系:组合类对象一般表示“整体-部分”关系,而派生类对象一般表达“一般-具体”关系。
展开全部
1。创建派生类对象的同时也创建了基类的对象。假设基类对象的成员大小是4字节,派生类本身增加的成员是8字节的话,不考虑虚函数表指针所占的空间,那么派生类对象的成员要占12字节空间,其中前4字节是继承的基类成员,后8字节是自己增加的成员。
2。基类的所有成员被派生类继承后都变成派生类所拥有了,只是对于继承而来的private成员没办法直接访问而已,这样设计保证了基类private成员的安全性。如果你希望基类的某些成员被派生类继承且能访问而又不允许外界普通用户代码访问的话,将基类的那些成员声明为protected就好了。
3。组合类对象中,它嵌套包含的类成员就和普通成员一样,按照声明的顺序在内存中依次排列。而且,如果这个组合类对象是派生类的话,如我在1中所说,基类的成员还是会排在所有派生类自身成员的前面的。
2。基类的所有成员被派生类继承后都变成派生类所拥有了,只是对于继承而来的private成员没办法直接访问而已,这样设计保证了基类private成员的安全性。如果你希望基类的某些成员被派生类继承且能访问而又不允许外界普通用户代码访问的话,将基类的那些成员声明为protected就好了。
3。组合类对象中,它嵌套包含的类成员就和普通成员一样,按照声明的顺序在内存中依次排列。而且,如果这个组合类对象是派生类的话,如我在1中所说,基类的成员还是会排在所有派生类自身成员的前面的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.派生类创建对象后调用了基类的构造函数,不是意味着创建派生类对象的同时也创建了基类的对象,正确解释是:派生类会继承基类的public或者protected成员变量,派生类的构造函数除了要给自己新增的成员变量赋值之外,还要给从基类继承来的成员变量赋值。那么给从基类继承来的成员变量赋值就要调用基类的构造函数。例子如下:
class A
{
public:
int x;
int y;
A(int a, int b):x(a), y(b){}
};
class B:public A
{
public:
int m;
int n;
B(int c, int d, int e, int f):A(c, d),m(e), n(f){}
};
2.派生类不会继承基类的私有变量,所以派生类的对象不包含基类的私有变量。
3.组合类是指一个类的成员变量是另外一个类的对象,举例如下:
class A;
class B
{
private:
A a;
};
类B的对象含有类A对象的全部成员变量和函数。
而派生类对象只继承基类的public和protected成员(含成员变量和成员函数),所以不含继承基类的private部分。
两者的差别在于基类的private部分。
class A
{
public:
int x;
int y;
A(int a, int b):x(a), y(b){}
};
class B:public A
{
public:
int m;
int n;
B(int c, int d, int e, int f):A(c, d),m(e), n(f){}
};
2.派生类不会继承基类的私有变量,所以派生类的对象不包含基类的私有变量。
3.组合类是指一个类的成员变量是另外一个类的对象,举例如下:
class A;
class B
{
private:
A a;
};
类B的对象含有类A对象的全部成员变量和函数。
而派生类对象只继承基类的public和protected成员(含成员变量和成员函数),所以不含继承基类的private部分。
两者的差别在于基类的private部分。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询