C++ 让一个类生成另一个类?
好的,我有一个课堂作业,要求我们一起使用一系列的课程,来模拟一个警察开罚单 下面是它的工作原理: 驻车类别: 了解汽车的品牌、型号、颜色、车牌号和行驶时间 那辆车已经停好了 停车计时器等级: 知道花了多少时间 ParkingTicket类: 了解车辆的品牌、型号、颜色、驾照,计算罚款,以及出票人员的姓名和车牌号 警官级别: 知道警官的名字和警徽号吗 及 检查ParkedCar和ParkingMeter对象并确定是否需要票据,如果需要,则生成ParkingTicket对象 以下是我目前掌握的代码:C++ 让一个类生成另一个类?,c++,class,inheritance,C++,Class,Inheritance,好的,我有一个课堂作业,要求我们一起使用一系列的课程,来模拟一个警察开罚单 下面是它的工作原理: 驻车类别: 了解汽车的品牌、型号、颜色、车牌号和行驶时间 那辆车已经停好了 停车计时器等级: 知道花了多少时间 ParkingTicket类: 了解车辆的品牌、型号、颜色、驾照,计算罚款,以及出票人员的姓名和车牌号 警官级别: 知道警官的名字和警徽号吗 及 检查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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
高级停车场
{
弦乐;
弦乐造型;
弦色;
弦张开;
未标记的整数;
公众:
停放汽车();
字符串getMake()常量
{return sMake;}
void setMake(字符串温度)
{sMake=temp;}
字符串getModel()常量
{返回sModel;}
void setModel(字符串温度)
{sModel=temp;}
字符串getColor()常量
{返回sColor;}
void setColor(字符串温度)
{sColor=temp;}
字符串getPlate()常量
{返回sPlate;}
无效设置板(管柱温度)
{sPlate=temp;}
int getMins()常量
{返回iMinsParked;}
};
ParkedCar::ParkedCar()
{
srand(时间(空));
iMinsParked=(rand()%10000);
}
等级停车计
{
int iMinsPurch;
公众:
无效设置分钟(内部温度)
{iMinsPurch=temp;}
int getMins()常量
{返回iMinsPurch;}
}
舱位票:公共停车场
{
公众:
字符串getName()
{返回sName;}
int getBadge()
{返回iBadge;}
};
班主任
{
弦圈套;
内伊巴奇;
公众:
好友字符串票证::getName();
//{返回sName;}
friend int Ticket::getBadge();
//{返回iBadge;}
};
int main()
{
停车场;
首先,学习使用构造函数。所有这些东西都是……它是一个汽车的身份,或者一个警察。等等。它应该在对象被构建时提供。C++不是java;停止处理像java bean这样的类。
第二,车票不是停车车,它与汽车关联,但不是汽车本身。
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.
};
因此,官员不需要知道汽车的潜在复杂细节,也不需要知道车票需要什么信息。他只需将自己和汽车交给建造商,并相信它会提取出所需的任何信息。(在这种情况下,我们只需存储这两个项目的副本。)
对于Officer
生成Ticket
的实例,他只需要一个带有Ticket
返回类型的方法。而不是int
或string
或void
,将返回类型标记为Ticket
,让方法构建并返回Ticket
对象。教授希望用户输入ut对于所有的汽车信息,所以我不能将所有这些整齐地打包到一个构造函数中,这就是为什么我有这么多的变体。但我仍然不太明白如何实现你的代码…无论我使用哪个类,我都会声明一个尚未定义的类的实例。此外,由于汽车信息必须由用户定义,我不知道如何才能实现在初始化任何数据之前,将其传递给Ticket。汽车已经存在。如果不存在,警察就不会知道它是非法停车的,也不会有可写入的票据。:P至于用户对汽车的输入,获取输入,然后构建一辆汽车。循环性是一个小问题。但可以通过说c来解决LASS票据;类PARKEDCAR;在<代码>军官> /Cuff>类中。C++允许在函数声明中使用不完整类型,并且一个军官不需要包含任何类型的对象,所以一旦代码移到它自己的.CPP文件,所有的都应该是好的。(在.cpp文件中,您将包括这些类的标题。)老实说,我不知道你的代码应该如何工作。:C我们最近才了解到如何使用友元声明在类之间传递信息。这里你要我将整个类交给构造函数?我完全不知道如何正确地完成这项工作,也不知道你的代码中的20个函数是什么应该是的。我只需要一个简单的、伪证明的方法来实现这一点。好吧,我看到了在警官创建时如何使用票证的构造函数是有意义的。但是我不明白在不使用所有这些访问器的情况下,我如何将所有其他类的数据传递给票证。
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);
}
};