说我有
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有警报()因此它不会传递给其他孩子。
答案 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)
当你有一个具有基类引用类型的子类对象时,你不能调用只存在于子类中的方法,你只能调用两个类共有的方法。基类函数是 - 在这种情况下骑行,除非我们使用超级。