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