如何将此代码拆分为两个不同的文件,header和.cpp



如何将其拆分为两个不同的文件,如头文件和.cpp,同时保持相同的输出?

#include <iostream>
using namespace std;

class Package // base class
{
private:
string nameSender, addressSender, citySender, stateSender, ZIPSender,nameRecipient, addressRecipient, cityRecipient, stateRecipient, ZIPRecipient;
double weight,cost;

public:
//constructor
Package(string nameSender, string addressSender, string citySender, string stateSender, string ZIPSender,string nameRecipient, string addressRecipient, string cityRecipient, string stateRecipient, string ZIPRecipient,double weight,double cost)
{
this->nameSender = nameSender;
this->addressSender = addressSender;
this->citySender = citySender;
this->stateSender = stateSender;
this->ZIPSender = ZIPSender;
this->nameRecipient = nameRecipient;
this->addressRecipient = addressRecipient;
this->cityRecipient = cityRecipient;
this->stateRecipient = stateRecipient;
this->ZIPRecipient = ZIPRecipient;
if(weight > 0)
this->weight = weight;
if(cost > 0)
this->cost = cost;
}
//get methods
double getWeight()
{
return weight;
}
double getCost()
{
return cost;
}
double calculateCost()
{
return weight*cost;
}

void display()
{
cout<<"nName of sender : "<<nameSender;
cout<<"nAddress : "<<addressSender;
cout<<"nCity : "<<citySender;
cout<<"nState : "<<stateSender;
cout<<"nZIP : "<<ZIPSender;
cout<<"nNameof Recipient : "<<nameRecipient;
cout<<"nAddress : "<<addressRecipient;
cout<<"nCity : "<<cityRecipient;
cout<<"nState : "<<stateRecipient;
cout<<"nZIP : "<<ZIPRecipient;
cout<<"nWeight of Package : "<<weight;
cout<<"nCost per ounce : "<<cost;
}
};
class TwoDayPackage : public Package // derived class
{
private :
double flatFee;

public:
//sending arguments to base class constructor
TwoDayPackage(string nameSender, string addressSender, string citySender, string stateSender, string ZIPSender,string nameRecipient, string addressRecipient, string cityRecipient, string stateRecipient, string ZIPRecipient,double weight,double cost,double flatFee):Package(nameSender,addressSender,citySender,stateSender,ZIPSender,nameRecipient,addressRecipient,cityRecipient,stateRecipient,ZIPRecipient,weight,cost)
{
this->flatFee = flatFee;
}

double calculateCost()
{
return flatFee + getWeight()*getCost();
}

void displayInfo()
{
cout<<"nTwo Day Package ";
display();
cout<<"nFlat Fee : "<<flatFee;
}
};

class OverNightPackage : public Package
{
private :
double additionalFee;

public:
OverNightPackage(string nameSender, string addressSender, string citySender, string stateSender, string ZIPSender,string nameRecipient, string addressRecipient, string cityRecipient, string stateRecipient, string ZIPRecipient,double weight,double cost,double additionalFee):Package(nameSender,addressSender,citySender,stateSender,ZIPSender,nameRecipient,addressRecipient,cityRecipient,stateRecipient,ZIPRecipient,weight,cost)
{
this->additionalFee = additionalFee;
}

double calculateCost()
{
return additionalFee + getWeight()*getCost();
}

void displayInfo()
{
cout<<"nOvernight Package ";
display();
cout<<"nAdditional Fee : "<<additionalFee;
}    
};
int main() {

TwoDayPackage p1("John","234,New Street","ALBANY", "NY" ,"12261-0001","Smith","307"," Trenton", "NJ"," 08625-0307",4.5,12.5,15.5);

p1.displayInfo();

cout<<"nTotal Cost : "<<p1.calculateCost();

OverNightPackage p2("Candy","234,New Street","ALBANY", "NY" ,"12261-0001","Nancy","307"," Trenton", "NJ"," 08625-0307",4.8,17.5,23.5);

p2.displayInfo();

cout<<"nTotal Cost : "<<p2.calculateCost();
return 0;
}

这里有一个例子
package.hpp

#include <string>  
class Package // base class
{
private:
std::string m_nameSender;
std::string m_addressSender;
std::string m_citySender;
std::string m_stateSender;
std::string m_ZIPSender;
std::string m_nameRecipient;
std::string m_addressRecipient;
std::string m_cityRecipient;
std::string m_stateRecipient;
std::string m_ZIPRecipient;
double m_weight;
double m_cost;
public:
//constructor
Package(const std::string&  nameSender,
const std::string&  addressSender,
const std::string&  citySender,
const std::string&  stateSender,
const std::string&  ZIPSender,
const std::string&  nameRecipient,
const std::string&  addressRecipient,
const std::string&  cityRecipient,
const std::string&  stateRecipient,
const std::string&  ZIPRecipient,
//get methods
double getWeight() const;
double getCost() const;
double calculateCost() const;

void display() const;
};

package.cpp

#include "package.hpp"
#include <iostream>
using std::cout;  
using std::string;
Package :: Package(const string&  nameSender,
const string&  addressSender,
const string&  citySender,
const string&  stateSender,
const string&  ZIPSender,
const string&  nameRecipient,
const string&  addressRecipient,
const string&  cityRecipient,
const string&  stateRecipient,
const string&  ZIPRecipient,
double         weight,
double         cost)
: m_nameSender(nameSender),
m_addressSender(addressSender),
m_citySender(citySender),
m_stateSender(stateSender),
m_nameRecipient(nameRecipient),
m_addressRecipient(addressRecipient),
m_cityRecipient(cityRecipient),
m_ZIPRecipient(ZIPRecipient),
m_weight(weight),
m_cost(cost)
{
}
//get methods
double Package::getWeight()
{
return m_weight;
}
double Package::getCost()
{
return m_cost;
}
double Package::calculateCost()
{
return m_weight*cost;
}
void Package::display()
{
cout << "nName of sender : " << m_nameSender;
cout << "nAddress : " << m_addressSender;
cout << "nCity : " << m_citySender;
cout << "nState : " << m_stateSender;
cout << "nZIP : " << m_ZIPSender;
cout << "nNameof Recipient : " << m_nameRecipient;
cout << "nAddress : " << m_addressRecipient;
cout << "nCity : " << m_cityRecipient;
cout << "nState : " << m_stateRecipient;
cout << "nZIP : " << m_ZIPRecipient;
cout << "nWeight of Package : " << m_weight;
cout << "nCost per ounce : " << m_cost;
}

我随意展示了";m_ prefix";,以及初始化列表
我更改了构造函数以通过常量引用传递字符串。

我还应用了通用的编码准则,即每行一个变量声明,每行一一个参数(当有很多参数时(。这些使代码更易于维护和阅读。

编辑1:将#include文件添加到头文件中
编辑2:将头文件中的string更改为std::string

最新更新