好的,所以我有一个课程的作业,要求我们一起使用一系列课程,以模拟一个发票的警察。
以下是它的工作原理:
ParkedCar类:
了解汽车的品牌,型号,颜色,许可证编号和分钟数 汽车已经停放了
ParkingMeter类:
知道已经购买了多少时间
ParkingTicket Class:
了解汽车的品牌,型号,颜色,许可证,计算罚款,以及签发机票的人员的姓名和证件编号
PoliceOfficer Class:
知道官员的徽章编号
和
检查ParkedCar和ParkingMeter对象并确定是否需要票证,如果是,则生成ParkingTicket对象。
这是我到目前为止的代码:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
class ParkedCar
{
string sMake;
string sModel;
string sColor;
string sPlate;
int iMinsParked;
public:
ParkedCar();
string getMake() const
{ return sMake; }
void setMake(string temp)
{ sMake = temp; }
string getModel() const
{ return sModel; }
void setModel(string temp)
{ sModel = temp; }
string getColor() const
{ return sColor; }
void setColor(string temp)
{ sColor = temp; }
string getPlate() const
{ return sPlate; }
void setPlate(string temp)
{ sPlate = temp; }
int getMins() const
{ return iMinsParked; }
};
ParkedCar::ParkedCar()
{
srand(time(NULL));
iMinsParked = (rand() % 10000);
}
class ParkingMeter
{
int iMinsPurch;
public:
void setMins(int temp)
{ iMinsPurch = temp; }
int getMins() const
{ return iMinsPurch; }
}
class Ticket : public ParkedCar
{
public:
string getName()
{ return sName; }
int getBadge()
{ return iBadge; }
};
class Officer
{
string sName;
int iBadge;
public:
friend string Ticket::getName();
//{ return sName; }
friend int Ticket::getBadge();
//{ return iBadge; }
};
int main()
{
ParkedCar Park;
cout << endl << endl;
cout << Park.getMins();
cout << endl << endl;
return 0;
}
我很困惑的地方主要是票务和官员课程。该任务显然希望Ticket拥有来自所有其他课程的自己的信息,但我不确定如何传递这些信息。我试过让它成为ParkedCar的子类,但我只是得到了一个多重定义错误。我无法让朋友的功能发挥作用。我已经尝试过两种方式,如果我在Ticket中制作它们,它会告诉我官员没有定义。而且我真的很困惑我应该如何在没有实际初始化时生成Ticket实例的官员编写代码。
所以:
如何将所有信息输入Ticket类?
我如何让官员生成故障单的实例?
请记住,这是一项学生作业,而不是专业作业。我只是想做任务所说的。我对这个问题的“解决方法”并不感兴趣,因为那不是教授想要的。
提前感谢您的时间。 :d
答案 0 :(得分:2)
首先:学习使用构造函数。所有这些你正在设置的东西......它是汽车或警察等身份的组成部分。它应该在物体建造时提供。 C ++不是Java;退出像Java bean这样的处理类。 :P
其次,Ticket不是ParkedCar。它将与汽车联系起来,但不是一辆汽车。请考虑一下:
class Ticket {
ParkedCar violator;
Officer issuer;
public:
Ticket(const Officer &cop, const ParkedCar &car) :
violator(car), issuer(cop) {
}
ParkedCar getCar() { return violator; }
Officer getOfficer() { return issuer; }
// Note, no mutators here!
// The biggest reason you had to have mutators, is that your construction
// was incomplete.
// The info associated with a Ticket should not be modified once the ticket
// is written. And since the constructor has all the info needed, there's no
// need to provide a way to modify them.
};
因此,警官无需了解汽车的潜在复杂细节,也不需要知道机票所需的确切信息。他可以将自己和汽车交给构造函数,并相信它会提取所需的任何信息。 (在这种情况下,我们只存储两个项目的副本。)
class Officer {
std::string name;
int badge_number;
public:
Officer(const std::string& name, int badge) : name(name), badge_number(badge) { }
public std::string getName() { return name; }
public int getBadgeNumber() { return badge_number; }
Ticket writeTicketFor(const ParkedCar &violator) {
return Ticket(*this, violator);
}
};