访问用户定义类型的数组的特定属性
Accessing specific attributes of an array of a user defined type
我是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;
}
}
}
- 通过指向指针数组的指针访问子类的属性
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组
- C++ 为什么数组没有长度属性
- 在C++中循环数组时访问结构属性
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- 访问用户定义类型的数组的特定属性
- 如何从对象数组中提取属性数组?
- 如何从类中返回自定义数组项目并操纵其属性?C
- 从C 读取QML数组属性
- 在不同的类C++中构造类属性数组
- 哪个更快,单个对象数组或多个数据属性数组
- 私有属性C++上的动态二维数组
- 只有Arduino的第一个对象在包含在另一个对象的集合/数组中时会丢失其数据属性值
- 为什么我不能更改结构的字符数组属性?
- 如何使用C Win32 API设置和获取多个值(数组值)到Active Directory中的单个属性
- 属性数组?
- 我正在尝试通过 Boost 图形库从 Graphviz DOT 文件中读取图形.如何读取存储在数组中的未知数量的属性
- 一个函数模板,可以根据任何属性对对象数组进行排序
- 将参数数组分配给头文件中定义的类属性(数组)
- OpenGL4.0中使用交错属性数组的性能增益