C++ 让一个类生成另一个类?

C++ 让一个类生成另一个类?,c++,class,inheritance,C++,Class,Inheritance,好的,我有一个课堂作业,要求我们一起使用一系列的课程,来模拟一个警察开罚单 下面是它的工作原理: 驻车类别: 了解汽车的品牌、型号、颜色、车牌号和行驶时间 那辆车已经停好了 停车计时器等级: 知道花了多少时间 ParkingTicket类: 了解车辆的品牌、型号、颜色、驾照,计算罚款,以及出票人员的姓名和车牌号 警官级别: 知道警官的名字和警徽号吗 及 检查ParkedCar和ParkingMeter对象并确定是否需要票据,如果需要,则生成ParkingTicket对象 以下是我目前掌握的代码:

好的,我有一个课堂作业,要求我们一起使用一系列的课程,来模拟一个警察开罚单

下面是它的工作原理:

驻车类别:

了解汽车的品牌、型号、颜色、车牌号和行驶时间 那辆车已经停好了

停车计时器等级:

知道花了多少时间

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