[英]this values in derived classes in C++
我對C ++派生類中的“ this”指向什么有疑問。
class A
{
int a;
public:
void funca() { cout << this << endl; }
};
class B
{
int b;
public:
void funcb() { cout << this << endl; }
};
class Derived : public A, public B {};
int main() {
Derived d;
d.funca();
d.funcb(); // prints 4bytes more than the above.
}
在這種情況下,如何在派生類中解釋基類中的“ this”? 是派生類的還是基類的? 從輸出中,我認為這指向使用它的類對象。 我對嗎?
基類中的“ this”如何在派生類中解釋?
我想問題應該是基類如何駐留在派生類中
當一個類被另一個繼承時,編譯器會將基類的成員放置在派生類中。 this
總是指實際的對象,您對此是正確的。 d.funcb();
提前打印2個字節,因為B
成員在Derived
中A
4個字節之后開始。 這4個字節由A::a
成員變量占用。 但是不能保證布局和內存模型,並且取決於編譯器。 Derived
一種可能的內存布局可能是
Members of A (4 byte in this case for a)
Members of B (4 byte in this case for b)
Members of Derived (if any)
因此,派生類沒有基類“ this” ,只有一個this
,它引用實際的對象。 派生類會在其中獲取基類成員的副本。
派生類包含兩個子對象A和B。這些子對象具有非靜態成員函數。 這些函數的第一個隱式參數是指向相應對象的poinetr。 因此,在您的示例中,當函數funca被調用時,它獲取指向類Derived中的子對象A的指針。 以相同的方式調用函數funcb時,它將獲得指向類Derived中的子對象B的指針。
簡單地說,在每個類定義中,這表示已定義類的對象。 在類A的類定義中,這表示類A的對象。在類B的類定義中,這表示類B的對象。在類內部,派生的子對象A和B具有不同的位置,即不同的地址。 因此,您的示例中的輸出將有所不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.