使一个类生成另一个类
Making a class generate another 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实例的Officer编写代码。
因此:
如何将所有信息输入Ticket类?
我该如何让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);
}
};
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用std::transform将一个范围的元素添加到另一个范围中
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- C++试图读取一个文件并输出到另一个文本文件
- 如何将指针从一个void函数传递到另一个C++
- 如何从另一个文件继承私有成员变量和公共函数
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- C ++读取用户输入的字符一个一个符号
- 循环速度要比一个一个一个一个
- 计算一个*一个没有溢出的模数n