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

sla*_*ton 2 c++ polymorphism inheritance

假设我有一个父类:

Class Parent{
public:
virtual void doSomething(){}
}
Run Code Online (Sandbox Code Playgroud)

和两个孩子:

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

Class Daughter: public Parent{
public:
  void doSomething(){
  // Do another thing
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Parent obj = Son();
Run Code Online (Sandbox Code Playgroud)

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

Jar*_*Par 7

为此,您需要将Parent声明作为指针或引用.

Parent* obj = new Son();
Run Code Online (Sandbox Code Playgroud)

在它当前的形式你宣称obj是一个实例Parent.这意味着赋值Son()不会创建对Son实例的引用,而是将对象切片为Parent值.