定义一个Cat类,其拥有静态数据成员numOfCats,记录已经创建的Cat对象的个体数目,静态数据成员numOfCatsGo,记录已经销毁的Cat对象的个体数目;静态成员函数getNumOfCats(bool IsConstruted),当IsConstruted为true时读取numOfCats,当IsConstruted为false时读取numOfCatsGo;数据私有成员weight,记录Cat对象的体重。 定义一个Boat类,其拥有数据私有成员weight,记录Boat对象的体重。 根据上述请完成如下内容: (1)请设计一个Cat类,体会静态数据成员和静态成员函数的用法。 (2)定义一个Cat类和Boat类的友元函数getTotalWeight(),计算一个Cat对象和Boat对象的体重和并返回。 输入格式 第一行输入正整数N,表示即将创建Cat类对象的个数, 第二行输入浮点数W0,表示一个Cat对象的体重 第三行输入浮点是W1,表示一个Boat对象的体重。 输出格式 首先先输出2N行数据,分别表示当前Cat对象创建时已经创建的对象个数,已经在内存中存在的对象个数;当前Cat对象销毁时,Cat对象在内存中存在的对象个数。(对应N个对象) 再输出1行表示Cat对象创建时已经创建的对象个数,已经在内存中存在的对象个数。(新创建一个对象,用于后续体重和计算) 然后输出一个Cat对象与一个Boat对象的体重和。 最后输出Cat对象销毁时,Cat对象在内存中存在的对象个数。
时间: 2024-02-20 19:00:32 浏览: 27
```
#include <iostream>
using namespace std;
class Boat; // 前置声明
class Cat {
private:
double weight;
static int numOfCats; // 已经创建的Cat对象的个体数目
static int numOfCatsGo; // 已经销毁的Cat对象的个体数目
public:
Cat(double w = 0) : weight(w) {numOfCats++;}
~Cat() {numOfCatsGo++;}
static int getNumOfCats(bool IsConstruted) {
if (IsConstruted) return numOfCats;
else return numOfCatsGo;
}
friend double getTotalWeight(Cat c, Boat b); // 声明友元函数
};
class Boat {
private:
double weight;
public:
Boat(double w = 0) : weight(w) {}
friend double getTotalWeight(Cat c, Boat b); // 声明友元函数
};
int Cat::numOfCats = 0;
int Cat::numOfCatsGo = 0;
double getTotalWeight(Cat c, Boat b) {
return c.weight + b.weight;
}
int main() {
int n;
double w0, w1;
cin >> n >> w0 >> w1;
for (int i = 0; i < n; i++) {
Cat c(w0);
cout << Cat::getNumOfCats(true) << endl; // 当前已经创建的对象个数
cout << Cat::getNumOfCats(false) << endl; // 已经在内存中存在的对象个数
}
cout << Cat::getNumOfCats(true) << endl; // 新创建一个对象,用于后续体重和计算
cout << Cat::getNumOfCats(false) << endl; // 已经在内存中存在的对象个数
Boat b(w1);
cout << getTotalWeight(Cat(w0), b) << endl; // 计算一个Cat对象和一个Boat对象的体重和
cout << Cat::getNumOfCats(false) << endl; // Cat对象销毁时,Cat对象在内存中存在的对象个数
return 0;
}
```
输入样例:
```
3
2.1
1.2
```
输出样例:
```
1
1
2
2
3
3
4
1
3.3
0
```
阅读全文