从具有相同虚拟函数的父函数派生时如何调用子函数



假设我有一个父类:

Class Parent{
public:
virtual void doSomething(){}
}

和两个孩子:

Class Son: public Parent{
public:
  void doSomething(){
  // Do one thing
  }
}
Class Daughter: public Parent{
public:
  void doSomething(){
  // Do another thing
  }
}

如果我像这样设置一个子类的实例:

Parent obj = Son();

如何正确调用由Son定义的doSomething()方法,而不是Parent 中的空函数

为了做到这一点,您需要将Parent声明设置为指针或引用。

Parent* obj = new Son();

在它的当前形式中,您声明objParent的实例。这意味着Son()的赋值不会创建对Son实例的引用,而是将对象切片为Parent值。

  • http://en.wikipedia.org/wiki/Object_slicing

最新更新