真是一个不好的称呼,想不起来怎么写,对不起。

所以说我有以下代码:

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);
}

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

有什么办法可以用C++做到这一点,我是否必须使用模板或某些我不了解的高级C++功能?

最佳答案

一字节的补丁:

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

您的版本使用值作为参数,这意味着该函数将复制b(拷贝是A),然后调用该拷贝的getSize()。在此版本中,该函数通过引用获取参数,并调用b自己的getSize(),即B::getSize()

关于c++ - C++继承,调用给定的类函数而不是其父类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30041498/

10-08 23:41