簡體   English   中英

如何將此代碼拆分為兩個不同的文件,header 和 .cpp?

[英]How can I split this code into two different files, header and .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;
}

這是一個例子。
包.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;
};

包.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:改stringstd::string的頭文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM