我知道子类可以继承超类中的方法,但是超类可以为它的子类做同样的事情吗?例如:
Alpha *a = new Alpha ();
Beta *b = new Beta ();
Gamma *g = new Gamma ();
g = b;
在第四个语句中,我创建一个Gamma对象作为Beta对象,但Gamma是超类,beta是子类。所以要么g得到一个指向b的指针,要么这个代码不会编译,我不太明白哪个答案是正确的。如果有人可以请说明这将是伟大的。
答案 0 :(得分: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();
};
答案 1 :(得分:1)
不,超类不能从其子类继承方法,因为通常超类不应该知道从它派生的内容。