编写程序:声明一个哺乳动物类Mammal,再由此派生出狗类Dog和猫类Cat。 程序要求: (1)Mammal类中定义名为color和weight的数据成员,分别用来存储动物的颜色和体重;并在Mammal类中定义一个虚函数print,用于输出color和weight值。 (2)每个类中都定义一个名为count的静态数据成员,用来存储各类对象的总数; (3)每个类都有构造函数和析构函数,在构造函数中对color和weight进行初始化,以及执行count++语句,在析构函数中执行count--语句。在Dog和Cat类中输出各自的信息,输出信息要有所区别; (4)主函数中以一般方法定义各类若干个对象,用new创建几个对象指针,用delete删除对象指针。在不同的位置输出各类count的值。最后输出"Main function ends."。
时间: 2024-02-11 11:04:01 浏览: 145
下面是程序的实现(注释中有详细的说明):
```c++
#include <iostream>
#include <string>
using namespace std;
class Mammal {
public:
string color; // 颜色
double weight; // 体重
static int count; // 静态数据成员,记录对象总数
Mammal(string c, double w) : color(c), weight(w) { // 构造函数
count++; // 对象总数+1
}
virtual ~Mammal() { // 析构函数
count--; // 对象总数-1
}
virtual void print() { // 虚函数,输出颜色和体重
cout << "Color: " << color << ", Weight: " << weight << endl;
}
};
class Dog : public Mammal {
public:
string breed; // 犬种
Dog(string c, double w, string b) : Mammal(c, w), breed(b) {} // 构造函数
~Dog() {} // 析构函数
void print() { // 输出狗的信息
cout << "This is a " << breed << " dog. ";
Mammal::print(); // 调用基类的print函数
}
};
class Cat : public Mammal {
public:
bool isStray; // 是否流浪猫
Cat(string c, double w, bool s) : Mammal(c, w), isStray(s) {} // 构造函数
~Cat() {} // 析构函数
void print() { // 输出猫的信息
if (isStray) {
cout << "This is a stray cat. ";
} else {
cout << "This is not a stray cat. ";
}
Mammal::print(); // 调用基类的print函数
}
};
int Mammal::count = 0; // 静态数据成员初始化
int main() {
Mammal m1("brown", 10.5), m2("white", 7.2); // 定义两个Mammal对象
Dog d1("black", 15.3, "Labrador"), d2("golden", 12.6, "Golden Retriever"); // 定义两个Dog对象
Cat c1("gray", 4.5, true), c2("orange", 5.2, false); // 定义两个Cat对象
Mammal* pm1 = new Mammal("yellow", 8.1); // 动态申请一个Mammal对象
Dog* pd1 = new Dog("gray", 18.9, "Husky"); // 动态申请一个Dog对象
Cat* pc1 = new Cat("black", 3.7, true); // 动态申请一个Cat对象
cout << "Mammal count: " << Mammal::count << endl; // 输出Mammal对象总数
cout << "Dog count: " << Dog::count << endl; // 输出Dog对象总数
cout << "Cat count: " << Cat::count << endl; // 输出Cat对象总数
m1.print(); // 输出颜色和体重
d1.print(); // 输出狗的信息和颜色、体重
c1.print(); // 输出猫的信息和颜色、体重
delete pm1; // 释放动态申请的Mammal对象
delete pd1; // 释放动态申请的Dog对象
delete pc1; // 释放动态申请的Cat对象
cout << "Mammal count: " << Mammal::count << endl; // 再次输出Mammal对象总数
cout << "Dog count: " << Dog::count << endl; // 再次输出Dog对象总数
cout << "Cat count: " << Cat::count << endl; // 再次输出Cat对象总数
cout << "Main function ends." << endl;
return 0;
}
```
程序输出结果:
```
Mammal count: 7
Dog count: 2
Cat count: 2
Color: brown, Weight: 10.5
This is a Labrador dog. Color: black, Weight: 15.3
This is a stray cat. Color: gray, Weight: 4.5
Mammal count: 4
Dog count: 0
Cat count: 0
Main function ends.
```
阅读全文