mad*_*ada 10 c++ class object language-lawyer
[..] 不是任何其他对象的子对象的对象称为完整对象[..]。
所以考虑一下这段代码:
struct Base {};
struct Derived : Base {};
struct MostDerived : Derived {};
Run Code Online (Sandbox Code Playgroud)
我无法理解标准中引用的措辞:
如果完整对象、成员子对象或数组元素属于类类型,则其类型被视为最派生类 [..] 最派生类类型或非类类型的对象称为最派生类目的。
从引用中我了解到,完整对象的类型是“最派生的”类类型。说到这里,我真的不明白剩下的文字。
根据问题““最派生的对象”是什么意思?” 我认为(如果我错了,请纠正我),仅“最派生”类类型的对象,如MostDerived,被称为“最派生”对象。这是真的?
如果我创建了一个Base像这样的对象:Base b_obj = Base(),该对象是b_obj“最派生的”对象吗?
如果我创建了一个Derived像这样的对象:Derived d_obj = Derived(),该对象d_obj也是“最派生的”对象吗?
“最派生”中的“派生”一词是否意味着该对象是类似类的对象MostDerived,或者意味着该对象中没有类子对象?
use*_*522 10
根据问题““最派生的对象”是什么意思?” 我认为(如果我错了,请纠正我),仅“最派生”类类型的对象(如 MostDerived)被称为“最派生”对象。这是真的吗?
“大多数派生类”应该依赖于所考虑的对象。它本身不是类的属性。
如果我创建了一个像这样的 Base 对象: Base b_obj = Base(),那么对象 b_obj 是“最派生”对象吗?
是的,b_obj是一个变量,也是一个完整的对象。完整的对象始终是最派生的对象。
如果我创建了一个 Derived 对象,如下所示: Derived d_obj = Derived(),那么对象 d_obj 也是“最派生”对象吗?
与上述相同。
“最派生”中的“派生”一词是否意味着该对象是像 MostDerived 这样的类的对象,或者意味着该对象中没有类子对象?
“最派生的”意味着不存在任何其他对象,所考虑的对象是其基类子对象。这又不是类本身的属性,而是取决于类的具体实例。例如,如果Derived使用 创建一个对象new Derived,则它包含一个Base基类子对象,并且该子对象不是最派生对象。然而,该Derived对象是最派生的对象,因为不存在例如MostDerived它是其基类子对象的任何对象。
是否每个“完整”对象都是“最衍生”对象
是的,每个完整的对象都是最派生的对象。但反之则不然。例如
struct A {
Base b;
};
A a;
Run Code Online (Sandbox Code Playgroud)
a是类型的对象A,本身是最派生对象和完整对象,但a.b也是最派生对象,尽管不是完整对象。