135(Package继承层次)使用在习题12.9中创建的Package类继承层次结构,创建一个用于显示若干Package的地址信息并计算其运输费用的程序。程序应该包含一个Package指针的vector对象,其中的指针指向TwoDayPackage 对象和OvernightPackage对象。遍历该vector对象,多态性地处理这些Package。对于每个Package调用获取函数,获得发送者和接收者的地址信息,然后打印输出这两个地址,就像它们出现在邮包标签上一样。此外,调用每个Package的calculateCost成员函数并输出结果。跟踪记录该vector中所有Package的总的运输费用,并在循环遍历结束时显示此总费用。
时间: 2024-03-18 21:38:38 浏览: 24
好的,下面是实现该程序的代码:
```cpp
#include <iostream>
#include <vector>
#include "Package.h"
#include "TwoDayPackage.h"
#include "OvernightPackage.h"
using namespace std;
int main()
{
// 创建一个 vector 对象,其中的指针指向 TwoDayPackage 对象和 OvernightPackage 对象。
vector<Package*> packages;
packages.push_back(new TwoDayPackage("John", "123 Main St", "Chicago", "IL", "60616",
"Mary", "456 Oak St", "Boston", "MA", "02101", 10.0, 2.0, 5.0));
packages.push_back(new OvernightPackage("Tom", "789 Elm St", "New York", "NY", "10001",
"Bob", "321 Maple St", "Los Angeles", "CA", "90001", 8.0, 3.0, 0.5));
// 遍历该 vector 对象,多态性地处理这些 Package。
double totalCost = 0.0;
for (Package* package : packages)
{
// 对于每个 Package 调用获取函数,获得发送者和接收者的地址信息,然后打印输出这两个地址。
cout << package->getSenderName() << endl
<< package->getSenderAddress() << endl
<< package->getSenderCity() << ", " << package->getSenderState() << " " << package->getSenderZipCode() << endl
<< endl
<< package->getRecipientName() << endl
<< package->getRecipientAddress() << endl
<< package->getRecipientCity() << ", " << package->getRecipientState() << " " << package->getRecipientZipCode() << endl
<< endl;
// 调用每个 Package 的 calculateCost 成员函数并输出结果。
double cost = package->calculateCost();
cout << "Shipping cost: $" << cost << endl << endl;
// 跟踪记录该 vector 中所有 Package 的总的运输费用。
totalCost += cost;
}
// 在循环遍历结束时显示此总费用。
cout << "Total shipping cost: $" << totalCost << endl;
// 释放内存
for (Package* package : packages)
{
delete package;
}
return 0;
}
```
其中,我们使用了 `vector<Package*>` 来存储多个 Package 对象,这样可以方便地对它们进行遍历处理。在遍历过程中,我们使用了多态性来调用每个 Package 对象的成员函数,从而实现了代码的简洁性和灵活性。最后,我们需要记得释放内存,避免内存泄漏。