每[intro.object]/2:
[..] 不是任何其他物件的子物件的物件稱為完整物件 [..]。
所以考慮一下這段代碼:
struct Base {};
struct Derived : Base {};
struct MostDerived : Derived {};
我無法從標準中理解這句話中的措辭:
[object.intro]/6:
如果完整物件、成員子物件或陣列元素屬于型別別,則其型別被認為是最派生類 [..] 最派生型別別或非型別別的物件稱為最派生類目的。
從參考中我理解的是,一個完整物件的型別是“最派生的”型別別。我停在這里,我真的不明白其余的措辭。
根據問題““最衍生的物件”是什么意思?我認為(如果我錯了,請糾正我),型別為“最衍生”類的物件,例如
MostDerived,被稱為“最衍生”物件。這是真的?如果我創建了
Base這樣的物件:Base b_obj = Base(),該物件b_obj是“最衍生”的物件嗎?如果我創建了
Derived這樣的物件:Derived d_obj = Derived(),該物件d_obj也是“最衍生”的物件嗎?“最派生”中的“派生”一詞是否意味著該物件是類的物件
MostDerived,或者意味著該物件中沒有類子物件?
uj5u.com熱心網友回復:
根據問題““最衍生的物件”是什么意思?我認為(如果我錯了,請糾正我),只有“最衍生”型別別的物件,如 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;
a是一個型別的物件,A它本身是一個最衍生的物件和一個完整的物件,但a.b也是一個最衍生的物件,盡管不是一個完整的物件。
uj5u.com熱心網友回復:
- 物件不是類。
- 物件是類、陣列或內置型別的實體化。
- 子物件是物件的類成員物件、陣列元素或基類。
- 派生物件(和大多數派生物件)僅在類繼承的背景關系中才有意義。
void foo() {
int i = 0; // complete object, but not most-derived (not class type)
}
class A {
int i = 0; // non complete object, not most-derived
}
void bar() {
A a; // complete object, but not derived, so can't be "most derived"
}
class B : A { }
void biz() {
B b; // complete object, derived object, and most-derived object
}
是否每個“完整”物件都是“最衍生”物件
不,最派生物件是最派生類的物件,而最派生類必須是型別別。物件可能是型別別的,但也存在非型別別的物件。
- 僅當該類繼承時,型別別的每個完整物件都是最派生物件。
- 派生最多的物件可能是子物件,因此您不能從派生最多的物件推斷出物件的完整性(但是,您可以推斷出派生最多的物件是型別別)。
因此,如果我創建了這樣的 Base 物件:
Base b_obj = Base(),該物件b_obj是“最衍生”的物件嗎?
是的。最派生b_obj的物件是型別的物件Base。然而,這不一定是一個完整的物件,因為這可能是一個類成員定義。同樣,完全不是大多數派生的同義詞。
Also if I have created an object of Derived like this:
Derived d_obj = Derived(), Is the objectd_objis also a "most-derived" object?
Yes. The most-derived object of d_obj is an object of type Derived.
If you have an object created as type MostDerived:
MostDerived md;
- It is an object of type
MostDerived - It is an object of type
Derived - It is an object of type
Base - If it is not a member subobject, then it is a complete object
- Its most-derived object is of type
MostDerived - It has a subobject of type
Derived, which is neither a complete object nor a most-derived object - Its subobject of type
Derivedhas a subobject of typeBase, which is neither a complete object nor a most-derived object.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/446022.html
上一篇:C#類初始化和設定資料和串列資訊
下一篇:Python類-使用實體作為屬性
