C++继承,调用给定的类函数而不是父类?

Ian*_*ray 3 c++ inheritance

真的很糟糕的标题,想不出怎么说出来,对不起.

所以说我有以下代码:

class A {
    virtual int getSize() {
        return 0;
    }
}

class B : public A {
    int getSize() {
        return 32;
    }
}

void doStuff(A a) {
   std::cout << a.getSize() << std::endl;
}

int main() {
   B b;
   doStuff(b);
}
Run Code Online (Sandbox Code Playgroud)

它会打印出来0,但我希望它打印出来32.换句话说,我想将它传递给类,并打印出类函数,所以我可以创建一个类C,其中大小为64,如果我将该C实例传递给doStuff函数,我希望它打印64.

有什么方法可以用C++做到这一点,我是否必须使用模板或一些我不知道的奇特的C++特性?

Bet*_*eta 8

一个单字节补丁:

void doStuff(A &a) {
  std::cout << a.getSize() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

您的版本按值获取参数,这意味着该函数会复制b(一个副本A),然后调用副本getSize().在这个版本中,函数通过引用获取参数,并调用b自己的参数getSize(),即B::getSize().

  • 为了将来参考,此效果称为对象的"切片".+ 1 (2认同)