我知道子类可以继承超类的方法,但是超类可以为子类做同样的事情吗?例如:超类可以从其子类继承方法吗?
Alpha *a = new Alpha();
Beta *b = new Beta();
Gamma *g = new Gamma();
g = b;
在第四条语句,我创建一个伽玛对象是一个测试对象,但伽玛是超类和β是子类。所以要么g得到一个指向b的指针,否则这个代码将无法编译,我不太明白哪个答案是正确的。如果有人可以请澄清,那会很好。
我知道子类可以继承超类的方法,但是超类可以为子类做同样的事情吗?例如:超类可以从其子类继承方法吗?
Alpha *a = new Alpha();
Beta *b = new Beta();
Gamma *g = new Gamma();
g = b;
在第四条语句,我创建一个伽玛对象是一个测试对象,但伽玛是超类和β是子类。所以要么g得到一个指向b的指针,否则这个代码将无法编译,我不太明白哪个答案是正确的。如果有人可以请澄清,那会很好。
不,超类无法从其子类继承方法,因为通常超类不应该有知道从它派生的东西。
如果你有两个继承对方的类,该怎么办?无限多态! –
@SamIam(题外话),让我想起魔兽世界中魔法羊同时对战的时代; * baaaah〜*;) –
它不能继承他们在技术上,但它可以使用他们,如果你使用Curiously Recurring Template Pattern (CRTP)。
template<class SubClass>
class SuperClass
{
void DoSomething()
{
static_cast<SubClass *>(this)->Foo();
}
};
class SubClass: public SuperClass<SubClass>
{
void Foo();
};
确实,这是一种访问你的函数的方法,但是如果你明确地从你的模板子类中调用一个函数,你肯定应该检查你的设计.... –
代码不应该编译。 –
*“在第四个声明中,我创建了一个Gamma对象”*。第四条语句创建的唯一内容是内存泄漏。 – Joe
您能否更清楚地解释“Alpha”,“Beta”和“Gamma”的继承结构是什么? (只要每个人的'class'行就足够了。) – duskwuff