解决这个文件里面所有的问题
时间: 2024-10-23 08:13:48 浏览: 21
要解决文件中提到的所有问题,你需要完成以下两个任务:
### 实验2 数据共享保护实验
#### 目的与要求
1. **掌握静态数据成员的意义及使用方法**
- 静态数据成员是类的一个特殊成员,它被所有对象共享。
- 它可以在类内声明并在类外初始化。
2. **掌握友元使用方法**
- 友元可以是函数或类,它们可以访问类的私有和保护成员。
- 友元函数或类通常用于实现一些特定的操作,这些操作需要访问类的内部数据。
#### 实验内容
##### 1. 货物管理程序
**目标**:编写一个程序,通过定义类 `Carlo` 来模拟商店货物购进和卖出的情况。
**具体步骤**:
- **定义类 `Carlo`**:
- 私有成员变量:
- `double price`:每件货物的价格
- `double weight`:每件货物的重量
- 静态数据成员:
- `static double totalWeight`:货物的总重量
- `static double totalValue`:货物的总价值
- 构造函数:
- 初始化对象的 `price` 和 `weight`,并更新 `totalWeight` 和 `totalValue`
- 析构函数:
- 删除对象时,从 `totalWeight` 和 `totalValue` 中减去对象的 `weight` 和 `price`
**示例代码**:
```cpp
#include <iostream>
class Carlo {
private:
double price;
double weight;
static double totalWeight;
static double totalValue;
public:
Carlo(double p, double w) : price(p), weight(w) {
totalWeight += weight;
totalValue += price * weight;
}
~Carlo() {
totalWeight -= weight;
totalValue -= price * weight;
}
static void displayTotals() {
std::cout << "Total Weight: " << totalWeight << " kg" << std::endl;
std::cout << "Total Value: $" << totalValue << std::endl;
}
};
double Carlo::totalWeight = 0.0;
double Carlo::totalValue = 0.0;
int main() {
Carlo item1(50.0, 10.0); // 价格 $50/kg,重量 10kg
Carlo item2(60.0, 15.0); // 价格 $60/kg,重量 15kg
Carlo::displayTotals();
return 0;
}
```
##### 2. 银行存款管理程序
**目标**:设计一个程序,其中有3个类 `CBank`、`BBank` 和 `GBank`,分别代表中国银行类、工商银行类和农业银行类。每个类都包含一个私有数据 `balance`,用于存放储户在该行的存款数,并有一个友元函数 `total` 用于计算储户在这3家银行中的总存款数。
**具体步骤**:
- 私有成员变量:
- `double balance`:储户在该行的存款数
- 公有成员函数:
- `void setBalance(double b)`:设置存款数
- `double getBalance()`:获取存款数
- 友元函数 `total`:
- 计算储户在3家银行中的总存款数
**示例代码**:
```cpp
#include <iostream>
class CBank {
private:
double balance;
public:
void setBalance(double b) { balance = b; }
double getBalance() const { return balance; }
friend double total(const CBank& cb, const BBank& bb, const GBank& gb);
};
class BBank {
private:
double balance;
public:
void setBalance(double b) { balance = b; }
double getBalance() const { return balance; }
friend double total(const CBank& cb, const BBank& bb, const GBank& gb);
};
class GBank {
private:
double balance;
public:
void setBalance(double b) { balance = b; }
double getBalance() const { return balance; }
friend double total(const CBank& cb, const BBank& bb, const GBank& gb);
};
double total(const CBank& cb, const BBank& bb, const GBank& gb) {
return cb.getBalance() + bb.getBalance() + gb.getBalance();
}
int main() {
CBank cb;
BBank bb;
GBank gb;
cb.setBalance(1000.0);
bb.setBalance(2000.0);
gb.setBalance(1500.0);
std::cout << "Total Balance in all banks: $" << total(cb, bb, gb) << std::endl;
return 0;
}
```
以上代码实现了文件中描述的所有功能,包括静态数据成员的使用和友元函数的应用。希望这对你有所帮助!
阅读全文