我知道子类可以从超类继承方法,但是超类可以为其子类做同样的事情吗?例如:
Alpha *a = new Alpha ();
Beta *b = new Beta ();
Gamma *g = new Gamma ();
g = b;
在第四个语句中,我正在创建一个 Gamma 对象作为 Beta 对象,但 Gamma 是超类,而 beta 是子类。所以要么 g 得到一个指向 b 的指针,要么这个代码不会编译,我不太明白哪个答案是正确的。如果有人可以请澄清一下,那就太好了。
我知道子类可以从超类继承方法,但是超类可以为其子类做同样的事情吗?例如:
Alpha *a = new Alpha ();
Beta *b = new Beta ();
Gamma *g = new Gamma ();
g = b;
在第四个语句中,我正在创建一个 Gamma 对象作为 Beta 对象,但 Gamma 是超类,而 beta 是子类。所以要么 g 得到一个指向 b 的指针,要么这个代码不会编译,我不太明白哪个答案是正确的。如果有人可以请澄清一下,那就太好了。
从技术上讲,它不能继承它们,但是如果您使用Curiously Recurring Template Pattern (CRTP) ,它可以使用它们。
template<class SubClass>
class SuperClass
{
void DoSomething()
{
static_cast<SubClass *>(this)->Foo();
}
};
class SubClass: public SuperClass<SubClass>
{
void Foo();
};
不,超类不能从其子类继承方法,因为通常超类不应该知道从它派生的内容。