C++ C++;类-对象数组

C++ C++;类-对象数组,c++,class,C++,Class,我要为一家电影院设计一个售票系统,它只有50个座位(5排,每个10个座位) 我被授予了下面的电影课程,这不应该被修改 class Cinema{ private: Ticket ticket[50]; // not sure what it is going on public: Cinema(); //constructor double purchaseTicket(int); // ticket ID as parameter

我要为一家电影院设计一个售票系统,它只有50个座位(5排,每个10个座位)
我被授予了下面的电影课程,这不应该被修改

class Cinema{
    private:
        Ticket ticket[50]; // not sure what it is going on
    public:
        Cinema(); //constructor
        double purchaseTicket(int); // ticket ID as parameter, check if it is available, if so update it as unavailable. If not, return 0.
        void listAll();
};
这是客票舱

class Ticket{
    private:
        int ID[50]; //ticket ID (correct to store data in array?)
        int price; // ticket price
        // have to provide set and get function for ID and price, have no idea even I've googled on this topic 
        bool available[50]; // availability of ticket
    public:
        Ticket(); //constructor
        bool status(int); // return availability of ticket
        void setAvailable(int); //update status of ticket as available
        void buy(int); //update status of ticket as unavailable
};
这是模拟购票功能的主要功能(给定)

int main(){
    Cinema myCinema;
    myCinema.listAll(); // available seats print "O", otherwise print "X"

    //simulate to purchse ticket 15, 16, 17
    double price = 0;
    price += myCinema.purchaseTicket(15);
    price += myCinema.purchaseTicket(16);
    price += myCinema.purchaseTicket(17);

    cout <<"\nTotal Price: $" << price << endl << endl;

    //print the current status
    myCinema.listAll();

    return 0;
}
intmain(){
电影院我的电影院;
myCinema.listAll();//可用座位打印“O”,否则打印“X”
//模拟购买车票15、16、17
双倍价格=0;
价格+=我的电影院购票(15);
价格+=我的电影院购票(16);
价格+=我的电影院购票(17);

每个座位都有一张票。因此有五十张票要买。这是一种有点奇怪的看待事物的方式,但我认为你可以把“票”看作是“座位”的同义词

您的票证类是错误的。请记住,票证对象代表单个票证(代表单个座位)。因此,一张票证具有一个id和一个可用性。因此票证类中的数组是错误的

class Ticket{
    private:
        int ID; //ticket ID 
        int price; // ticket price
        bool available; // availability of ticket
    public:
        ...
};
setter和getter是微不足道的

int Ticket::getPrice() const { return price; }
void Ticket::setPrice(int p) { price = p; }
可用性类似


刚刚注意到,
Cinema::purchaseTicket
返回一个
双倍的
,为什么我不知道。

您不能直接使用ticket数组,因为它是Cinema的私有成员。您只能使用类中提到的purchase函数访问它。因为该类不应修改,所以这是唯一的方法。 (注意:ID成员的int数组错误,请仅使用intint)

但是,如果您要修改该类,使Ticket Ticket[50]成为公共的

关于如何使用它的示例如下所示:

myCinema.ticket[0].ID访问第一张票证的ID(最好使用字符数组存储票证ID,否则int:int数组错误


通过点运算符访问您想要的成员。

您是说您无法创建对象数组吗?如果是,您面临什么问题?您的文本应该详细解释哪些数组是数组。我认为这是一个关于设计的问题,而不是关于数组的问题。没有具体回答这个问题,但您似乎不确定对象的类型ID应该是。您可以将类声明为模板:
template class Ticket{private:T ID[50];//Ticket ID(是否正确地将数据存储在数组中?…}
Cinema::purchaseTicket
方法中可以清楚地看出,票证id是一个整数,而不是一个字符数组。然而,他在类中的票证id旁边的注释中询问,将id存储为int数组是否正确,这是错误的。它应该是int(在他的例子中)我同意,但你的答案是使用字符数组,这可能会混淆OP。是的,这是我的建议,以防他的电影课可以修改。我会编辑我的答案,让OP更清楚。