(注意,這是我的實際設計的過於簡單化了。)指針在基類構造函數派生類
考慮以下幾點:
class CParentA;
class C_Child
public:
C_Child(C_ParentB* parent) : m_parent(parent){};
virtual ~C_Child();
CParentB* m_parent;
};
class C_ParentA : public C_Child
{
public:
C_ParentA(C_GrandParent *gp) : C_Child(gp){};
virtual ~C_ParentA(){};
}
class C_ParentB
{
public:
C_ParentB(){};
virtual ~C_ParentB(){};
void foo(){};
}
class C_GrandParent : public C_ParentB, public C_ParentA
{
public:
C_GrandParent() : C_ParentA(this){};
virtual ~C_GrandParent();
}
main()
{
C_GrandParent gp;
gp.m_parent->foo();
}
似乎parentB
的指針,發送到孩子的構造函數在創建祖父母時無效。我曾經想過,即使父母沒有完全構建,它的指針(this
)仍然有效。我也曾嘗試將ParentB
作爲存儲在grandparent
中的指針,並在grandparent
構造函數中動態創建對象。但是這顯然有相同的結果。
FWIW:這個目標:grandparent
有很多parents
,其中一些有children
。一個child
可能需要訪問另一個child
或parent
(uncle
/cousin
)。我曾想過,讓他們在一位家長的領導下能夠處理家庭成員之間的很多相互關係。在這種情況下,設置適當的指針似乎成了問題。
對於層次結構順序感到抱歉 - 我從我的實際設計中重新命名,並將事情顛倒過來。將'祖父母'視爲'容器',將'父母'視爲該容器內的對象,其中一些包含其他對象。容器內的各種對象也需要訪問其中的其他對象。這就是我想要的。我以爲我可以將'this'傳遞給'Container'對象給它中的所有對象。編譯好的時候,實際的指向'Container'的指針還沒有生效。而且,是的,正如你所指出的那樣,我確信在所有內容建成之前我不會使用該指針。 – user3182551