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

时间:2017-06-06 12:53:01

标签: c++ vector constructor static

我有一个飞机级别,这架飞机有一个座位类的矢量,名为" m_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&lt; _Ty,_Aloc&gt; :: push_back函数的重载不带0个参数,

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

m_seat.push_back({});

并且它有效!

现在,我还有另一个问题,那就是我的主要问题(SO规则:一次只询问一个问题!)所有座位号码似乎都增加到相同的数字!我还使用了&#34; resize&#34;向量的成员函数,而不是那个循环:

m_seat.resize(numberOfSeats);

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

1 个答案:

答案 0 :(得分:1)

免责声明:这是一个&#34;最佳猜测&#34;答案。

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

class Seat{
    static int lastSeatNumber;
    int seatNumber;

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

这样每个座位都会收到不同的号码。然而,这种设计很糟糕,因为它不允许例如两架飞机之间的座位号分享!它也不允许你自由地释放&#34;您不再使用的座位数量,而且这个数字只会继续增长。复制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;
    }
}

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