c++中 子类对象与父类对象的内存关系

 

问题:如题。假设有父类A与子类B

A实例化一个对象a   B实例化一个对象b

那么在内存中 a与b的地址关系是什么。是他们的首地址都一样吗?

解答:

他们是没有必然关系的。就跟你随便生成另外两个其他类型的变量一样。当然,你实例化的对象b跟A有关系。
b对象开头的部分4个字节是虚函数表,接着就是基类的数据成员,然后是子类的数据成员。
 
 
对方:C++中的类对象实例化后存在内存中的什么位置,堆还是栈?
我(思索,但不确定): 既可能在栈又可能在堆
对方:什么情况下在栈,什么情况下在堆?
我:如果类对象实例作为局部变量出现,放在栈中,作用域结束,类实例所占内存释放,如果是通过指针的形式 new class就在堆中创建,
在堆中的要手动删除。
对方:栈的分配回收,谁来控制?
我:操作系统
对方:那还要类实例的析构函数做什么?
我(有点晕)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++,继承关系父类并不会直接将自身内存复制给子类子类对象会包含父类对象的成员,并且可以访问父类的成员函数和成员变量,但是子类对象并不是父类对象的复制。 当创建一个子类对象时,子类对象会分配自己的内存空间,并包含父类对象的成员。子类对象的内存布局,通常会先包含父类的成员,然后再添加子类自己的成员。这样,子类对象可以直接访问父类的成员。 下面是一个简单的示例,演示了继承关系子类对象包含父类对象的成员: ```cpp #include <iostream> class Parent { public: int parentData; void parentMethod() { std::cout << "Parent method" << std::endl; } }; class Child : public Parent { public: int childData; void childMethod() { std::cout << "Child method" << std::endl; } }; int main() { Child child; child.parentData = 10; child.childData = 20; std::cout << "Parent data: " << child.parentData << std::endl; std::cout << "Child data: " << child.childData << std::endl; child.parentMethod(); child.childMethod(); return 0; } ``` 在上述代码,`Child`类继承自`Parent`类。创建`Child`类的对象`child`时,它会分配自己的内存空间,并包含`Parent`类的成员`parentData`,以及`Child`类自己的成员`childData`。通过对象`child`可以直接访问父类的成员函数`parentMethod()`和子类的成员函数`childMethod()`。 需要注意的是,由于子类对象包含父类对象的成员,因此在使用继承关系时需要注意内存布局和访问权限的相关问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值