我可以从C ++中的基类调用派生类的方法吗?如果是这样,我该怎么做?
谢谢。
答案 0 :(得分:3)
尝试从基类中调用该方法将调用派生类的实现,前提是它是虚拟的。
class Base {
public:
void do_stuff() {
print_me();
}
virtual void print_me() { std::cout << "Base" << std::endl; }
};
class Child : public Base {
virtual void print_me() { std::cout << "Child" << std::endl; }
};
int main() {
Base* b = new Child();
b->do_stuff(); // prints "Child"
}
答案 1 :(得分:0)
如果您不仅仅意味着虚拟调用(有时是昂贵的),您也可以直接调用继承树中任何类型的任何方法。只需static_cast
或dynamic_cast
this
即可进入所需类型并致电。但请注意,使用static_cast
是不安全的:您必须确保在编译时 此转换和后续调用在运行时是正确且安全的({{1将在运行时检查它。
一些简单的代码:
dynamic_cast
输出
B :: bar()的
检查出来,没问题。
另见CRTP。