gpt4 book ai didi

c++打印出具有重载函数的对象数组

转载 作者:搜寻专家 更新时间:2023-10-30 23:51:42 27 4
gpt4 key购买 nike

我有一个 Animal 类,其中有一些继承自它的动物。我正在覆盖 talk() 函数。我需要创建一个对象数组,然后为每个类调用 talk() 函数。但是,当我运行它时,我得到的唯一输出是“动物不会说话”。它只打印出 Animal 类的输出,而不是其他类的输出。

还有:如果我主要写了 cowObj.talk(); 输出就是我想要的“Moo!”。

class Animal
{
private:
int Leg;

public:

Animal(){
Leg = 4;
}
void talk(){
cout<< "\nAnimal can't talk!" << endl;
}
};



class Cow: public Animal
{
public:
using Animal::talk;
void talk(){
cout<< "\nMoooo!" << endl;
}
};



class Pig: public Animal
{
public:
using Animal::talk;
void talk(){
cout<< "\nGrunt!" << endl;
}
};


class Snake: public Animal
{

};



int main()
{

Animal arya[3];

Animal animalObj;
Cow cowObj;
Pig pigObj;
Snake snakeObj;


arya[0] = animalObj;
arya[1] = cowObj;
arya[2] = pigObj;
arya[3] = snakeObj;


for(int x= 0; x < 4; x++)
{
arya[x].talk();
}



return 0;
}

最佳答案

您不是在重载 talk 函数(即,提供具有不同参数列表的不同方法),而是覆盖它。为了允许它被多态调用,你应该将它声明为virtual。例如:

virtual void talk() {
cout<< "\nAnimal can't talk!" << endl;
}

关于c++打印出具有重载函数的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53700255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com