2

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

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

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

4

2 回答 2

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();
};
于 2012-12-10T21:08:52.460 回答
1

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

于 2012-12-10T20:52:57.003 回答