超类可以从其子类继承方法吗?

时间:2012-12-10 20:50:42

标签: c++ inheritance

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

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

在第四个语句中,我创建一个Gamma对象作为Beta对象,但Gamma是超类,beta是子类。所以要么g得到一个指向b的指针,要么这个代码不会编译,我不太明白哪个答案是正确的。如果有人可以请说明这将是伟大的。

2 个答案:

答案 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)

不,超类不能从其子类继承方法,因为通常超类不应该知道从它派生的内容。