繁体   English   中英

使用包含静态成员变量的类的向量

[英]Using vector of a class that contains static member variable

我有一个飞机班,这个飞机有一个名为“ m_seat”的Seat类向量。 在飞机的构造器中,我使用了座位数作为所需参数,以将m_seat矢量大小调整为用户要求的大小。 这是我的代码:

class Seat;

class Airplane {
    vector<Seat> m_seat;
public:
    Airplane(int);
};

class Seat{
    static int m_seatNumber;
public:
    Seat() { m_seatNumber += 10; }
};

int Seat::m_seatNumber = 100;

Airplane::Airplane(int numberOfSeats) {
    for (int i = 0; i<numberOfSeats; ++i) {
        m_seat.push_back();
    }
}

int main()
{
    Airplane(80);
    return 0;
}

但是它给了这个错误。

std :: vector <_Ty,_Aloc> :: push_back函数的重载不接受0个参数,

如果这确实是问题,我不知道应该在push_back()中放入什么? 所以我尝试了{}

m_seat.push_back({});

而且有效!

现在,我有另一个问题,这是我的主要问题 (因此,规则:一次只问一个问题!),所有座位数似乎都增加到了相同的数字! 我还使用了向量的“调整大小”成员函数,而不是该循环:

m_seat.resize(numberOfSeats);

但是问题(m_seatNumber的数量增加相同)仍未解决。 非英语母语者,对不起。

免责声明:这是一个“最佳猜测”答案。

如果您希望每个席位都有一个不同的,自动增加的数字,则需要两个值。 一个非静态的,描述每个座位,一个静态的,描述最后使用的号码:

class Seat{
    static int lastSeatNumber;
    int seatNumber;

public:
    Seat() { seatNumber = lastSeatNumber; lastSeatNumber += 10; }
};
int Seat::lastSeatNumber = 100;

这样,每个席位都会收到自己的不同号码。 但是,这种设计很糟糕,因为它不允许例如在两架飞机之间共享座位号! 它还不允许您“释放”您不再使用的座位数量,并且数量只能不断增加。 如果可能,还复制一个Seat根本不会操纵该数字。 允许Airplane班分配座位号会更好:

class Seat{
    int seatNumber;

public:
    Seat(int seatNumber) : seatNumber(seatNumber) { }
};

Airplane::Airplane(int numberOfSeats) {
    int seatNumber = 100;
    const int numberIncrement = 10;

    for (int i = 0; i < numberOfSeats; ++i) {
        m_seat.push_back(Seat(seatNumber));
        seatNumber += numberIncrement;
    }
}

这样,您可以通过向飞机构造函数添加另一个参数来告诉它从哪个数字开始计数来获得旧的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM