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;
}
我无法理解如何构建子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;
}