Aggregated Class显示默认构造函数

时间:2016-03-22 18:51:16

标签: c++ class aggregate

我正在为我的c ++课程编写Ticket Simulator程序。我在名为PoliceOfficer的类中有一个名为Parking Ticket的类。当我在源中显示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 个答案:

答案 0 :(得分:0)

main()中的PoliceOfficer对象与PoliceOfficer类中的ParkingTicket不同。

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();