C++ C++;继承,调用给定的类函数而不是其父类函数?
真是糟糕的标题,想不出该怎么说,对不起 假设我有以下代码:C++ C++;继承,调用给定的类函数而不是其父类函数?,c++,inheritance,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(
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);
}
A类{
虚拟int getSize(){
返回0;
}
}
B类:公共A{
int getSize(){
返回32;
}
}
空隙度凝灰岩(A){
std::cout一个单字节补丁:
void doStuff(A &a) {
std::cout << a.getSize() << std::endl;
}
void doStuff(A&A){
STD::CUT对象的切片是一种方法,另外,我认为,您要求的是C++中多态性的一种非常简单的使用。
这几乎是立即适用的,只需调用类A形状,B和C可以是正方形和三角形。DoStuff函数可以获取指向形状的指针,然后可以将其传递给三角形或正方形,当您在函数中遵循形状时,它将调用正确的函数
因此,你必须(我认为,你还需要公开成员):
A类{
公众:
虚拟int getSize(){
返回0;
}
};
B类:公共A{
公众:
int getSize(){
返回32;
}
};
空位(A*A){
std::cout getSize()您应该使用指针,甚至更好:智能指针!这样,运行时类型的函数就会被调用。这是polymorhpism的一个基本示例。如果您想避免使用指针,Beta的切片方法同样有效
#包括
#包括
甲级{
虚拟int getSize(){
返回0;
}
}
B类:公共A{
虚拟int getSize(){
返回32;
}
}
void doStuff(标准::共享\u ptr a){
std::cout getSize()供将来参考,此效果称为对象的“切片”。+1
class A {
public:
virtual int getSize() {
return 0;
}
};
class B : public A {
public:
int getSize() {
return 32;
}
};
void doStuff(A* a) {
std::cout << a->getSize() << std::endl;
}
int main() {
B b;
doStuff(&b);
}