访问用户定义类型的数组的特定属性

Accessing specific attributes of an array of a user defined type

本文关键字:属性 数组 访问 定义 类型 用户      更新时间:2023-10-16

我是C++的初学者,我正在尝试创建一个模拟飞行管理系统的程序。我创建了类来简化过程。现在,我有一个名为"Flight"的类,它具有其他用户定义的数据类型作为其属性。例如,它包括两个"日期"对象,用于我的航班对象的到达和离开日期。我还有一个由 30 个"乘客"对象组成的数组,它们代表我航班上的乘客。不过,我在更改此数组时遇到困难。我需要为我的 Flight 类编写一个成员函数,该函数可以从给定 ID 的数组中删除乘客(这是乘客的属性)。

我想尝试通过向它传递一个整数"removeID"来实现这个函数。然后将此值与数组中乘客的 ID 进行比较。如果匹配,则"删除"该条目,实质上释放数组中的空间。

我的类 Flight 在其自己的头文件中是这样定义的。

#include <string>
#include "Date.h"
#include "Time.h"
#include "Passenger.h"
#ifndef FLIGHT_H_
#define FLIGHT_H_
class Flight
{
public:
Flight(std::string, Date, Date, Time, Time);
float flightTime();
void addPassenger(Passenger);
void removePassenger(int);
bool listChecker(Passenger);
void flightListPrinter()const;
int seatsRemaining();
private:
std::string flightNumber;
Date arrivalDate;
Date departureDate;
Time arrivalTime;
Time departureTime;
std::string destination;
Passenger* passengerList[30];
int numPassengers;
};
#endif 

这是我的班级乘客的布局:

#include <string>
#include "Date.h"
class Passenger
{
public:
//Part a)
// Constructor
Passenger(int = 1337, std::string = "Name", std::string = "Banana Island", std::string = "(514)514-5145", Date birth=(1,1,1999));
// Part b)
int getID();
std::string getName();
std::string getAddress();
std::string getTel();
Date getBday();
// Part c)
void setAddress(std::string);
void setTel(std::string);
void setBirthD(Date);
// Part d)
void printInfo()const;
private:
int ID;
std::string name;
std::string address;
std::string Tel;
Date birthD;
};

我正在尝试访问 ID,这是乘客对象的属性,它本身就是 Flight 对象的属性。乘客都存储在一个名为 passengerList 的数组中,它有 30 名乘客长。在我的主文件中.cpp我定义了删除乘客功能,如下所示:

void Flight::removePassenger(int removeThisID) // Passing the ID to remove 
{
for (int i = 0; i < 30; i++) // Check all the passengers in the array
{
// Unsure about the way to access the ID. PassengerList[i].ID == removeThisID ?
}
}

不幸的是,您无法从数组中删除,根据我对项目的了解,我可以向您建议 2 件事来克服这个问题 1 - 您可以在每次删除时将数组存储在其他数据结构中,并在没有目标的情况下重新初始化它,这是大量的工作或, 2 - 您可以使用 cpp 标准库 (std) 中的向量,它将自动为您完成第一部分。您可以从 http://www.cplusplus.com/reference/vector/vector/vector/中检查向量

不能从数组中删除。其固定大小。
一种方法是每次更改大小时重新创建数组, 但那会很烦人。

很高兴有C ++标准库,您可以使用它来解决 这样的问题。

它具有一组不同的容器,用于管理其元素的存储空间并提供成员函数来访问它们。

Passenger* passengerList[30]替换为std::vector<Passenger> passengerList

void Flight::removePassenger(int removeThisID) // Passing the ID to remove 
{
for (unsigned int i = 0; i < passengerList.size(); i++)
{
// if (passengerList.at(i).getID() == removeThisID)
if (passengerList[i].getID() == removeThisID)
{
passengerList.erase(passengerList.begin()+i);
return;
}
}
}