2017-04-18 32 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不起作用。 –

相关问题