使一个类生成另一个类

Making a class generate another class?

本文关键字:另一个 一个      更新时间:2023-10-16

好吧,我有一个类的作业,要求我们一起使用一系列类,以模拟警察开罚单。

以下是它的工作原理:

停车车等级:

了解汽车的品牌、型号、颜色、车牌号和分钟数汽车已经停在

停车收费表等级:

知道已经购买了多少时间

停车票等级:

知道汽车的品牌、型号、颜色、执照,计算罚款,以及出票人员的姓名和徽章号码

警务办公室类别:

知道军官的名字和徽章号码

检查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实例的Officer编写代码。

因此:

  1. 如何将所有信息输入Ticket类?

  2. 我该如何让Officer生成Ticket的实例?

请记住,这是学生的作业,不是专业的。我只想按照作业上说的去做。我对"解决"这个问题的方法不感兴趣,因为这不是教授想要的。

提前感谢您抽出时间D

首先:学习使用构造函数。你设置的所有这些东西。。。它是汽车或警察等身份的组成部分。它应该在物体建造时提供。C++不是Java;不要像对待Javabean那样对待类。:P

其次,车票不是停车车。它将与汽车联系在一起,但本身不是汽车。考虑一下:

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);
    }
};
相关文章: