真是一个不好的称呼,想不起来怎么写,对不起。
所以说我有以下代码:
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/