定义一个基类Animal,它包含两个私有数据成员,一个是name,字符串类型,存储动物的名称(例如"Fido"或"Yogi"),另一个是整数成员weight,包含该动物的重量(单位是磅)。该基类还包含一个公共的虚成员函数who()和一个纯虚函数sound(),公共的虚成员函数who()返回一个string对象,该对象包含了Animal对象的名称和重量,纯虚函数sound()在派生类中应返回一个string对象,表示该动物发出的声音(模拟输出一串字符即可)。把Animal类作为一个公共基类,派生至少三个类Sheep、Dog和Cow,在每个类中实现sound()函数。该类还包含一个公共成员函数who(),它可以显示一个信息,给出Animal对象的动物名称和重量。成员在 两个派生类中是继承得来的。
时间: 2024-03-16 15:41:43 浏览: 107
好的,这是一个典型的面向对象编程的问题。下面是C++的实现代码:
```c++
#include <iostream>
#include <string>
using namespace std;
class Animal {
private:
string name;
int weight;
public:
Animal(string n, int w) : name(n), weight(w) {}
virtual string who() {
return "I am " + name + ", and I weigh " + to_string(weight) + " pounds.";
}
virtual string sound() = 0;
};
class Sheep : public Animal {
public:
Sheep(string n, int w) : Animal(n, w) {}
string sound() {
return "baa baa";
}
};
class Dog : public Animal {
public:
Dog(string n, int w) : Animal(n, w) {}
string sound() {
return "woof woof";
}
};
class Cow : public Animal {
public:
Cow(string n, int w) : Animal(n, w) {}
string sound() {
return "moo moo";
}
};
int main() {
Animal* a1 = new Sheep("Dolly", 150);
Animal* a2 = new Dog("Fido", 50);
Animal* a3 = new Cow("Betsy", 1000);
cout << a1->who() << " " << a1->sound() << endl;
cout << a2->who() << " " << a2->sound() << endl;
cout << a3->who() << " " << a3->sound() << endl;
delete a1;
delete a2;
delete a3;
return 0;
}
```
在Animal基类中,我们定义了两个私有数据成员name和weight,以及一个公共的虚成员函数who()和一个纯虚函数sound()。who()函数返回一个string对象,该对象包含了Animal对象的名称和重量,sound()函数在派生类中应返回一个string对象,表示该动物发出的声音。
然后我们派生了三个类Sheep、Dog和Cow,每个类中实现了sound()函数。
在main()函数中,我们创建了三个Animal对象,分别是Sheep、Dog和Cow。我们调用了它们的who()和sound()函数,输出了它们的信息和声音。最后我们释放了这三个Animal对象的内存。
这就是一个基于Animal基类派生出的多态的例子。
阅读全文