c++编写)使用在习题12.9中创建的Package类继承层次结构,创建一个用于显示若干Package的地址信息并计算其运输费用的程序。程序应该包含一个Package指针的vector对象,其中的指针指向TwoDayPackage 对象和OvernightPackage对象。遍历该vector对象,多态性地处理这些Package。对于每个Package调用获取函数,获得发送者和接收者的地址信息,然后打印输出这两个地址,就像它们出现在邮包标签上一样。此外,调用每个Package的calculateCost成员函数并输出结果。
时间: 2024-03-23 13:38:10 浏览: 47
好的,以下是完整的程序代码:
```c++
#include <iostream>
#include <vector>
#include "Package.h"
#include "TwoDayPackage.h"
#include "OvernightPackage.h"
using namespace std;
int main() {
// 创建 Package 指针的 vector 对象
vector<Package*> packages;
// 向 vector 中添加 TwoDayPackage 和 OvernightPackage 对象的指针
Package* p1 = new TwoDayPackage("John Smith", "123 Main St", "Anytown", "CA", 12345, "Jane Doe", "456 Elm St", "Somewhere", "CO", 67890, 10, 2, 1.5);
Package* p2 = new OvernightPackage("Jane Doe", "456 Elm St", "Somewhere", "CO", 67890, "John Smith", "123 Main St", "Anytown", "CA", 12345, 10, 1.5);
packages.push_back(p1);
packages.push_back(p2);
// 遍历 vector 对象,多态性地处理这些 Package
for (Package* p : packages) {
// 调用获取函数获得发送者和接收者的地址信息,并打印输出这两个地址
cout << "Sender: " << p->getSenderName() << endl
<< p->getSenderAddress() << endl
<< p->getSenderCity() << ", " << p->getSenderState() << " " << p->getSenderZip() << endl;
cout << "Recipient: " << p->getRecipientName() << endl
<< p->getRecipientAddress() << endl
<< p->getRecipientCity() << ", " << p->getRecipientState() << " " << p->getRecipientZip() << endl;
// 调用每个 Package 的 calculateCost 成员函数计算其运输费用,并输出结果
cout << "Shipping cost: $" << p->calculateCost() << endl << endl;
}
// 释放内存
for (Package* p : packages) {
delete p;
}
packages.clear();
return 0;
}
```
在程序中,我们使用 vector 容器来存储 Package 对象的指针,并使用 for 循环遍历该容器。在循环中,我们多态性地处理每个 Package 对象,并调用其获取函数输出发送者和接收者的地址信息,最后调用其 calculateCost 成员函数计算运输费用并输出结果。最后,我们在程序结束前释放了动态分配的内存。
阅读全文