2012-12-10 59 views
2

我知道子类可以继承超类的方法,但是超类可以为子类做同样的事情吗?例如:超类可以从其子类继承方法吗?

Alpha *a = new Alpha(); 
Beta *b = new Beta(); 
Gamma *g = new Gamma(); 
g = b; 

在第四条语句,我创建一个伽玛对象是一个测试对象,但伽玛是超类和β是子类。所以要么g得到一个指向b的指针,否则这个代码将无法编译,我不太明白哪个答案是正确的。如果有人可以请澄清,那会很好。

+1

代码不应该编译。 –

+3

*“在第四个声明中,我创建了一个Gamma对象”*。第四条语句创建的唯一内容是内存泄漏。 – Joe

+0

您能否更清楚地解释“Alpha”,“Beta”和“Gamma”的继承结构是什么? (只要每个人的'class'行就足够了。) – duskwuff

回答

1

不,超类无法从其子类继承方法,因为通常超类不应该有知道从它派生的东西。

+1

如果你有两个继承对方的类,该怎么办?无限多态! –

+2

@SamIam(题外话),让我想起魔兽世界中魔法羊同时对战的时代; * baaaah〜*;) –

2

它不能继承他们在技术上,但它可以使用他们,如果你使用Curiously Recurring Template Pattern (CRTP)

template<class SubClass> 
class SuperClass 
{ 
    void DoSomething() 
    { 
     static_cast<SubClass *>(this)->Foo(); 
    } 
}; 

class SubClass: public SuperClass<SubClass> 
{ 
    void Foo(); 
}; 
+0

确实,这是一种访问你的函数的方法,但是如果你明确地从你的模板子类中调用一个函数,你肯定应该检查你的设计.... –

相关问题