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

时间:2019-07-18 23:40:49

标签: c++ arrays class object

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

我想尝试通过传递一个整数“ 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位乘客。在我的main.cpp文件中,我定义了remove passenger函数,如下所示:

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 个答案:

答案 0 :(得分:1)

您无法从阵列中删除。它的固定大小。
一种方法是每次更改大小时都重新创建数组, 但这会很烦人。

很高兴有一个c ++标准库可以用来解决 这样的问题。

它具有一组containers的多样化集合,用于管理其元素的存储空间并提供用于访问它们的成员函数。

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.at[i].getID() == removeThisID)
        {
            passengerList.erase(passengerList.begin()+i);
            return;
        }
    }
}

答案 1 :(得分:1)

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

检查向量