我正在为我的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;
}
答案 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();