C ++类继承从基类型调用子方法

时间:2014-12-25 16:20:08

标签: c++ class inheritance

说我有

Class Base {}

Class Child: public Base {
   void alert() { printf("alert"); }
}

如何使用Base类型调用alert()?

Base *p = new Child();
p->alert() // error, Base does not have alert method

我已经尝试了这一点,但也没有效果。

p->Child::alert() // error, Base does not have alert method

我可以解决问题,如果我将alert()移动到Base当然但我不希望Base有警报()因此它不会传递给其他孩子。

2 个答案:

答案 0 :(得分:2)

  

"如何使用类型Base调用alert()?"

这样做使Base成为一个抽象类

class Base {
   virtual void alert() = 0; // <<<<<
}

class Child: public Base {
   void alert() { printf("alert"); }
}

如果您真的想要或不需要在基类中提供alert(),可以使用static_cast<Child*>

static_cast<Child*>(p)->alert();

答案 1 :(得分:0)

当你有一个具有基类引用类型的子类对象时,你不能调用只存在于子类中的方法,你只能调用两个类共有的方法。基类函数是 - 在这种情况下骑行,除非我们使用超级。