gpt4 book ai didi

c++ - 多重继承 C++ 和指针

转载 作者:太空狗 更新时间:2023-10-29 21:11:34 24 4
gpt4 key购买 nike

多重继承

class A{};
class B{};

class C: public A, public B{};

当我这样做时会发生什么

C *c = new C;
A *a = c;
B *b = c;

A *a1 = new C;
B *b1 = new C;

C 的第一个实例会发生什么?是否将 C 分配给 A 类型的指针切片对象,因此 A 仅指向包含 A 成员的 C 部分?如果是这样,它怎么知道什么时候达到顶峰?如果 C 包含 A 部分和 B 部分,并且 A 部分从偏移量 0 开始,它如何知道要停止在哪个偏移量?

感谢您的帮助。

最佳答案

C,作为两者的 child ,是一个 A 并且是一个 B。因此,当您向上转换指针时,不会发生切片(为什么会这样?)但指针指向对象的适当部分。标准图应该是 smth。喜欢

 c -> +++++++++++++++++++++
+ C +
a -> + +++++++++++++++++ +
+ + A + +
+ +++++++++++++++++ +
+ +
b -> + +++++++++++++++++ +
+ + B + +
+ +++++++++++++++++ +
+ +
+ C's own members +
+ +
+++++++++++++++++++++

ab 都指向各自的子对象。

它怎么知道的? — 好吧,编译器会创建内存布局,它绝对知道应该将指针分配给哪些虚拟地址,以及向上/向下转换如何等于指针偏移量。

请注意,当您使用指向基的普通指针作为对对象的唯一(和拥有)引用时,您应该声明基的析构函数virtual,否则您将无法正确销毁对象。

关于c++ - 多重继承 C++ 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com