调用派生类的方法

时间:2010-11-20 04:57:43

标签: c++

我可以从C ++中的基类调用派生类的方法吗?如果是这样,我该怎么做?

谢谢。

2 个答案:

答案 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_castdynamic_cast this即可进入所需类型并致电。但请注意,使用static_cast是不安全的:您必须确保在编译时 此转换和后续调用在运行时是正确且安全的({{1将在运行时检查它。

一些简单的代码:

dynamic_cast

输出

  

B :: bar()的

检查出来,没问题。

另见CRTP