2017-04-18 10 views
2

例如,如果主類是這樣的:在構圖關係中,成員是否可以調用父方法?

class parent{ 
    public: 
     void doSomethingParent(int x); 
     member foo; 
} 

和構件類是本

class member{ 
    public: 
     void doSomethingMember(int x); 
} 

可以doSomethingMember呼叫doSomethingParent

一種技術是const對成員中的parent類的引用,但有沒有更優雅的方法?

+0

你的意思是'doSomethingMember'應該調用'doSomethingParent'?請編輯您的問題以表明這一點。 –

+1

至於你的問題(如果是我懷疑),那麼答案是否定的。沒有對「父」對象的引用,「成員」類不知道它。 –

+1

一般來說,如果你發現自己需要做這樣的事情,那麼你的設計是有缺陷的。 – cdhowie

回答

1

在我大膽的意見中,你應該改變你的設計並使用繼承。與"has-a"設計不同,您應該將設計更改爲"is-a"。使用繼承的東西出來更直接的爲你想要完成的事情:

struct Base { 
    virtual ~Base() {} 
    virtual void doSomethingBase(int x) { std::cout << x << std::endl; } 
}; 

struct Derived : public Base { 
    void doSomethingDerived(int x) { Base::doSomethingBase(x); } 
}; 

Live Demo

+0

那麼,只有當is-a實際成立時,對吧?例如,如果您認爲有關內聯類LinkedListElement等的鏈表... – Aziuth

+0

在這種情況下,它是一塊板中存儲了一塊。 Is-a不起作用。 –

相關問題