真的很糟糕的标题,想不出怎么说出来,对不起.
所以说我有以下代码:
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++特性?
一个单字节补丁:
void doStuff(A &a) {
std::cout << a.getSize() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
您的版本按值获取参数,这意味着该函数会复制b(一个副本A),然后调用副本getSize().在这个版本中,函数通过引用获取参数,并调用b自己的参数getSize(),即B::getSize().
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |