簡體   English   中英

此值在C ++中的派生類中

[英]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成員在DerivedA 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM