2016-03-22 13 views
0

我正在爲我的C++類寫一個Ticket Simulator程序。我在名爲Parking Ticket的課程中有一個名爲PoliceOfficer的課程。當我在源中顯示officer.print()函數時,它顯示用戶提供的正確信息。但是,當我在ParkingTicket類中使用officer.print()函數時,它不顯示任何內容,即默認的構造函數。希望這是有道理的。這裏是我的代碼:聚合類顯示默認構造函數

class PoliceOfficer 
{ 
private: 
ParkedCar car; 
ParkingMeter time; 
std::string name; 
int badgeNumber; 

public: 
PoliceOfficer() 
{ 
    name = ""; 
    badgeNumber = 0; 
} 

PoliceOfficer(std::string i,int j) 
{ 
    name = i; 
    badgeNumber = j; 
} 
void set(std::string i, int j) 
{ 
    name = i; 
    badgeNumber = j; 
} 
std::string get_name() const 
{ 
    return name; 
} 
int get_badgeNum() const 
{ 
    return badgeNumber; 
} 

void print() const 
{ 
    std::cout << "Police Officer Information: " << std::endl; 
    std::cout << "Name: " << get_name() << std::endl; 
    std::cout << "Badge Number: " << get_badgeNum() << std::endl; 
} 
}; 

停車票類:

class ParkingTicket 
{ 
private: 
    ParkedCar car; 
    PoliceOfficer officer; 
    ParkingMeter time; 
    double fine; 
    int hours; 

public: 
    double baseFine = 25.0, hourlyFine = 10.0; 
    ParkingTicket(int i = 0, int j = 0) 
    { 
     fine = i; 
     hours = j; 
    } 
    void set_fine() 
    { 
     hours = (time.get_MinutesPurch() - car.get_minutesParked())/60; 
     fine += baseFine; 
     fine += hours *hourlyFine; 

    } 
    void ticket_print() const 
    { 
     officer.print(); 
    } 
    void print() 
    { 
     std::cout << "Ticket Information: " << std::endl; 
     std::cout << "Minutes in Violation: " << (car.get_minutesParked() -  time.get_MinutesPurch()) << std::endl; 
     std::cout << "Fine: $" << fine << std::endl; 

    } 

};

源:

int main() 
{ 
    string oname; 
    int bnum; 
    PoliceOfficer officer; 
    ParkingTicket ticket; 
    cout << "Enter your name: "; 
    getline(cin, oname); 
    cout << "Enter your badge number: "; 
    cin >> bnum; 
    officer.set(oname, bnum); 
    officer.print(); 
    ticket.ticket_print(); 
    return 0; 
} 
+1

你在哪裏設置'ParkingTicket'裏面'PoliceOfficer'的信息? –

+0

我不?我一定要嗎?我認爲它只會從警察類 – Thao

+1

@Thao'ParkingTicket'中設置信息,似乎需要對「PoliceOfficer」類實例進行初始化引用。 –

回答

0

PoliceOfficer對象在主()是不一樣的你的ParkingTicket類內的PoliceOfficer

ticket.officer.set(oname, bnum); 
ticket.officer.print(); 
ticket.ticket_print(); 

這工作,如果officer是不是私人的,所以你可能把它公開 或創建一個返回引用或指向您的私人官成員函數:

ticket.officer().set(oname, bnum); 
ticket.officer().print(); 
ticket.ticket_print(); 

ticket.officer()->set(oname, bnum); 
ticket.officer()->print(); 
ticket.ticket_print(); 

這裏的另一種選擇:

ticket.set_officer_details(oname, bnum); 
ticket.print_officer_details(); 
ticket.ticket_print();