C++ 子类构造函数

C++ Subclass Constructor

我无法理解如何构建子class。我的 parent class 叫做 "package" 而 children 叫做 "overnight" 和 "twoDay"。包裹 class 处理收件人的姓名和地址以及包裹重量和每盎司运费。 twoDay 还增加了额外的运费,隔夜增加了每盎司的运费。

包 class 文件 运行 很好,但我不知道如何在 children 构造函数中使用它。下面我将展示package和night的文件以及主程序文件的头部区域。

program.cpp

#include <iostream>
#include <string>
#include "package.h"
#include "twoDay.h"
#include "overnight.h"

int main() {

}

package.h

#include <string>
#include "name.h"
#include "address.h"

class package {
 public:
  package();
  package(std::string initFirst, std::string initLast, std::string initLineOne,
          std::string initLineTwo, std::string initCity, std::string initState,
          std::string initZip, double initWeight, double initPrice);
  double getWeight() const;
  double getPrice() const;
  double getCost() const;
 private:
  name recipientName;
  address recipientAddress;
  double weight;
  double price;
};

package.cpp

#include "package.h"

package::package(){
  recipientName = name();
  recipientAddress = address();
  weight = 0.0;
  price = 0.0;
}

package::package(std::string initFirst, std::string initLast, std::string initLineOne,
                 std::string initLineTwo, std::string initCity, std::string initState,
                 std::string initZip, double initWeight, double initPrice)
  : recipientName(initFirst,initLast), recipientAddress(initLineOne,initLineTwo,initCity,initState,initZip) {
  weight = initWeight;
  price = initPrice;
}

overnight.h

#include <string>

class overnight : public package {
 public:
  overnight();
  overnight(std::string initFirst, std::string initLast, std::string initLineOne,
            std::string initLineTwo, std::string initCity, std::string initState,
            std::string initZip, double initWeight, double initPrice, double initOunceFee);
  double getOvernightCost() const;
 private:
  package packageInfo;
  double ounceFee;
};

overnight.cpp

#include "overnight.h"

overnight::overnight() {
  packageInfo = package();
  ounceFee = 0.0;
}

overnight::overnight(std::string initFirst, std::string initLast, std::string initLineOne,
                     std::string initLineTwo, std::string initCity, std::string initState,
                     std::string initZip, double initWeight, double initPrice, double initOunceFee)
  : packageInfo(initFirst,initLast,initLineOne,initLineTwo,initCity,initState,initZip,initWeight,initPrice){
  ounceFee = initOunceFee;
}

所以我遇到问题的部分是带有参数的 overnight.cpp 的第二个构造函数。

classovernight是一个package,不需要合成,在里面嵌入一个package对象class.

至于构造函数,例如

overnight::overnight(std::string initFirst, std::string initLast, std::string initLineOne,
    std::string initLineTwo, std::string initCity, std::string initState,
    std::string initZip, double initWeight, double initPrice, double initOunceFee)
: package(initFirst,initLast,initLineOne,initLineTwo,initCity,initState,initZip,initWeight,initPrice){
//^^^^^^^ Note the use of the base class here
    ounceFee = initOunceFee;
}