【问题描述】
- 使用在上篇创建的Package类继承层次结构,创建一个用于显示若干Package的地址信息并计算其运输费用的程序。
- 程序应该包含一个Package指针的vector 对象,其中的指针指向TwoDayPackage 对象和OvernightPackage 对象。遍历该vector 对象,多态性地处理这些Package。
- 对于每个Package调用获取函数,获得发送者和接收者的地址信息,然后打印输出这两个地址,就像它们出现在邮包标签上一样。
- 此外,调用每个Package的calculateCost成员函数并输出结果。跟踪记录该vector 中所有 Package的总的运输费用,并在循环遍历结束时显示此总费用。
1.创建基类Package
Package(const string&, const string&, const string&, const string&,const string&, int , double , double);
double getWeight() const;
double getCostPerOunce() const;
virtual double calculateCost()
transCosts=weight*costPerOunce;
2.TwoDayPackage类,继承于Package类
class TwoDayPackage : public Package
TwoDayPackage(const string&, const string&, const string&, const string&,const string&, int , double , double, double);
virtual double calculateCost()
transCosts = Package::calculateCost() + surfaceMailCosts;
cout<<"寄件人信息:"<"姓名:"<"******************"<
cout<<
"收件人信息:"<
"姓名:"<"地址:"<" " <" "<" " <
"邮政编号: "<"******************"<
3.OvernightPackage类,继承于Package类
class OvernightPackage : public Package
OvernightPackage(const string&, const string&, const string&, const string&,const string&, int , double , double, double);
virtual double calculateCost()
transCosts = Package::calculateCost() + extraCosts;
cout<<"寄件人信息:"<"姓名:"<"******************"<
cout<<
"收件人信息:"<
"姓名:"<"地址:"<" " <" "<" " <
"邮政编号: "<"******************"<
4.Package类的方法实现
Package::Package(const string& senderName1,const string& recipientName1, const string& address1, const string& city1,const string& state1,int postalCode1, double weight1, double costPerOunce1)
: senderName(senderName1),recipientName(recipientName1),address(address1),city(city1),state(state1),postalCode(postalCode1),weight(weight1),costPerOunce(costPerOunce1)
cout << "Weight less than 0 !" << endl;
double Package::getWeight() const
double Package::getCostPerOunce() const
5.TwoDayPackage类的方法实现
TwoDayPackage::TwoDayPackage(const string& senderName1,const string& recipientName1, const string& address1, const string& city1,const string& state1,int postalCode1, double weight1, double costPerOunce1,double surfaceMailCosts1)
:Package(senderName1,recipientName1,address1,city1,state1,postalCode1,weight1,costPerOunce1)
surfaceMailCosts=surfaceMailCosts1;
6.OvernightPackage类的方法实现
OvernightPackage::OvernightPackage(const string& senderName1,const string& recipientName1, const string& address1, const string& city1,const string& state1,int postalCode1, double weight1, double costPerOunce1,double extraCosts1)
:Package(senderName1,recipientName1,address1,city1,state1,postalCode1,weight1,costPerOunce1)
7.测试程序
TwoDayPackage *ptr_Two=new TwoDayPackage("Lihua","Kandy","America","NewYork","NewYorkState",10041,30,5,36.2);
OvernightPackage *ptr_Over=new OvernightPackage("Zhang shan","Kandy","America","Houston","Texas",77001,50,8,25.6);
PackageClass.push_back(ptr_Two);
PackageClass.push_back(ptr_Over);
for(iter = PackageClass.begin(); iter != PackageClass.end(); ++iter)
cout<<"该快递的具体信息如下:"<
cout<<"该包裹的运输费用为: "<<(*iter)->calculateCost()<
cout<<"程序退出!"<
完整的代码如下:
Package(const string&, const string&, const string&, const string&,const string&, int , double , double);
double getWeight() const;
double getCostPerOunce() const;
virtual double calculateCost()
transCosts=weight*costPerOunce;
class TwoDayPackage : public Package
TwoDayPackage(const string&, const string&, const string&, const string&,const string&, int , double , double, double);
virtual double calculateCost()
transCosts = Package::calculateCost() + surfaceMailCosts;
cout<<"寄件人信息:"<"姓名:"<"******************"<
cout<<
"收件人信息:"<
"姓名:"<"地址:"<" " <" "<" " <
"邮政编号: "<"******************"<class OvernightPackage : public Package
OvernightPackage(const string&, const string&, const string&, const string&,const string&, int , double , double, double);
virtual double calculateCost()
transCosts = Package::calculateCost() + extraCosts;
cout<<"寄件人信息:"<"姓名:"<"******************"<
cout<<
"收件人信息:"<
"姓名:"<"地址:"<" " <" "<" " <
"邮政编号: "<"******************"<Package::Package(const string& senderName1,const string& recipientName1, const string& address1, const string& city1,const string& state1,int postalCode1, double weight1, double costPerOunce1)
: senderName(senderName1),recipientName(recipientName1),address(address1),city(city1),state(state1),postalCode(postalCode1),weight(weight1),costPerOunce(costPerOunce1)
cout << "Weight less than 0 !" << endl;
double Package::getWeight() const
double Package::getCostPerOunce() const
TwoDayPackage::TwoDayPackage(const string& senderName1,const string& recipientName1, const string& address1, const string& city1,const string& state1,int postalCode1, double weight1, double costPerOunce1,double surfaceMailCosts1)
:Package(senderName1,recipientName1,address1,city1,state1,postalCode1,weight1,costPerOunce1)
surfaceMailCosts=surfaceMailCosts1;
OvernightPackage::OvernightPackage(const string& senderName1,const string& recipientName1, const string& address1, const string& city1,const string& state1,int postalCode1, double weight1, double costPerOunce1,double extraCosts1)
:Package(senderName1,recipientName1,address1,city1,state1,postalCode1,weight1,costPerOunce1)
TwoDayPackage *ptr_Two=new TwoDayPackage("Lihua","Kandy","America","NewYork","NewYorkState",10041,30,5,36.2);
OvernightPackage *ptr_Over=new OvernightPackage("Zhang shan","Kandy","America","Houston","Texas",77001,50,8,25.6);
PackageClass.push_back(ptr_Two);
PackageClass.push_back(ptr_Over);
for(iter = PackageClass.begin(); iter != PackageClass.end(); ++iter)
-