请用c++实现创建Package类继承层次结构,创建了一个用于显示若干Package的地址信息并计算其运输费的程序。程序中包含一个Package指针的对组,可设数组大小为3,分别存放指向Package、TwoDayPackage和OvernightPackage对象的三个指针,可在创建对象的同时赋初值。初值如下: // initialize vector with Packages packages[ 0 ] = new Package( "Lou Brown", "1 Main St", "Boston", "MA", 11111, "Mary Smith", "7 Elm St", "New York", "NY", 22222, 8.5, .5 ); packages[ 1 ] = new TwoDayPackage( "Lisa Klein", "5 Broadway", "Somerville", "MA", 33333, "Bob George", "21 Pine Rd", "Cambridge", "MA", 44444, 10.4, .65, 2.0 ); packages[ 2 ] = new OvernightPackage( "Ed Lewis", "2 Oak St", "Boston", "MA", 55555, "Don Kelly", "9 Main St", "Denver", "CO", 66666, 12.25, .7, .25 ); 遍历这个指针数组,多态性的处理这些Package。对于每个Package调用获取函数,获得发送者和接受者的地址信息,然后打印输出这两个地址,此外,调用每个Package的CalculateCost成员函数并输出结果。最后显示所有Package的总的运输费用。

时间: 2024-01-05 11:11:13 浏览: 26
好的,下面是C++的代码实现: ``` #include <iostream> #include <string> #include <vector> using namespace std; class Package { public: Package(string sName, string sAddress, string sCity, string sState, int sZip, string rName, string rAddress, string rCity, string rState, int rZip, double w, double c) { senderName = sName; senderAddress = sAddress; senderCity = sCity; senderState = sState; senderZip = sZip; receiverName = rName; receiverAddress = rAddress; receiverCity = rCity; receiverState = rState; receiverZip = rZip; weight = w; costPerOunce = c; } virtual double CalculateCost() { return weight * costPerOunce; } string GetSenderAddress() { return senderAddress + ", " + senderCity + ", " + senderState + ", " + to_string(senderZip); } string GetReceiverAddress() { return receiverAddress + ", " + receiverCity + ", " + receiverState + ", " + to_string(receiverZip); } protected: string senderName; string senderAddress; string senderCity; string senderState; int senderZip; string receiverName; string receiverAddress; string receiverCity; string receiverState; int receiverZip; double weight; double costPerOunce; }; class TwoDayPackage : public Package { public: TwoDayPackage(string sName, string sAddress, string sCity, string sState, int sZip, string rName, string rAddress, string rCity, string rState, int rZip, double w, double c, double f) : Package(sName, sAddress, sCity, sState, sZip, rName, rAddress, rCity, rState, rZip, w, c) { flatFee = f; } double CalculateCost() { return Package::CalculateCost() + flatFee; } protected: double flatFee; }; class OvernightPackage : public Package { public: OvernightPackage(string sName, string sAddress, string sCity, string sState, int sZip, string rName, string rAddress, string rCity, string rState, int rZip, double w, double c, double f) : Package(sName, sAddress, sCity, sState, sZip, rName, rAddress, rCity, rState, rZip, w, c) { overnightFee = f; } double CalculateCost() { return Package::CalculateCost() + weight * overnightFee; } protected: double overnightFee; }; int main() { vector<Package*> packages(3); packages[0] = new Package("Lou Brown", "1 Main St", "Boston", "MA", 11111, "Mary Smith", "7 Elm St", "New York", "NY", 22222, 8.5, .5); packages[1] = new TwoDayPackage("Lisa Klein", "5 Broadway", "Somerville", "MA", 33333, "Bob George", "21 Pine Rd", "Cambridge", "MA", 44444, 10.4, .65, 2.0); packages[2] = new OvernightPackage("Ed Lewis", "2 Oak St", "Boston", "MA", 55555, "Don Kelly", "9 Main St", "Denver", "CO", 66666, 12.25, .7, .25); double totalCost = 0.0; for (const auto& pkg : packages) { cout << "Sender Address: " << pkg->GetSenderAddress() << endl; cout << "Receiver Address: " << pkg->GetReceiverAddress() << endl; double cost = pkg->CalculateCost(); totalCost += cost; cout << "Package cost: $" << cost << endl; cout << endl; } cout << "Total cost for all packages: $" << totalCost << endl; for (auto& pkg : packages) { delete pkg; } return 0; } ``` 此程序定义了一个`Package`类及其两个派生类`TwoDayPackage`和`OvernightPackage`,分别代表普通包裹和两日包裹、隔夜包裹。每个类都有一个`CalculateCost()`成员函数,可以计算运输费用;另外,`Package`类还提供了获取发送者和接收者地址信息的成员函数。 程序中使用了一个指针数组,存储了三个指向不同类型的包裹对象的指针。在遍历数组时,使用了多态性,即通过基类指针调用派生类函数,从而实现了不同类型包裹的计算和输出。

相关推荐

最新推荐

recommend-type

C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法

主要介绍了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法,涉及C++二叉树的定义、遍历、统计相关操作技巧,需要的朋友可以参考下
recommend-type

VS2019如何创建C++项目的实现示例

主要介绍了VS2019如何创建C++项目的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

C++实现哈夫曼树简单创建与遍历的方法

主要介绍了C++实现哈夫曼树简单创建与遍历的方法,对于C++算法的学习来说不失为一个很好的借鉴实例,需要的朋友可以参考下
recommend-type

C++实现新年贺卡程序

主要为大家详细介绍了C++实现贺卡程序,C++应用程序编写的雪花贺卡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C++简单集合类的实现方法

如何使用C++实现一个简单的集合类,这篇文章主要介绍了C++简单集合类的实现方法,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。