【发布时间】:2020-11-14 21:24:27
【问题描述】:
我有一个包含 bool** 属性的航班。
class Flight {
public:
int flightNumber;
int row;
int seat;
bool** seatReserv;
Flight();
Flight(int fly,int rw,int st);
~Flight();
Flight(const Flight& rightVal);
Flight& operator=(const Flight& rightVal);
};
我尝试将我的重载赋值运算符编写如下,但是我意识到即使我更改了我的行和座位属性,我也没有更改二维数组 [行] 和 [座位] 的大小。
Flight& Flight::operator=(const Flight& rightVal){
if(this != &rightVal){
for(int i = 0; i < row; i++){
delete[] this->seatReserv[i];
}
delete [] this->seatReserv;
flightNumber = rightVal.flightNumber;
row = rightVal.row;
seat = rightVal.seat;
this -> seatReserv = new bool*[row];
for(int i = 0; i < row; i++){
seatReserv[i] = new bool[seat];
}
for(int i = 0; i < row; i++){
for(int j = 0; j < seat; j++){
seatReserv[i][j] = rightVal.seatReserv[i][j];
}
}
}
return *this;
}
此外,我在下面的复制构造函数中遇到了同样的问题,所以问题是如何为我的类编写复制构造函数并重载赋值运算符?
Flight::Flight(const Flight& rightVal){
flightNumber = rightVal.flightNumber;
row = rightVal.row;
seat = rightVal.seat;
for(int i = 0; i < row; i++){
for(int j = 0; j < seat; j++){
seatReserv[i][j] = rightVal.seatReserv[i][j];
}
}
}
编辑:我不能使用向量,这是家庭作业,所以禁止使用向量。
【问题讨论】:
-
请注意,双指针不与二维数组相同。它只指向一个数组或指针,这是一个与二维数组完全不同的动物。后者的行是连续的,而前者不需要。
-
这个
delete[] this->seatReserv[seat];在你的第一个for循环中闻起来很有趣!我想你的意思是delete[] this->seatReserv[i];。 -
std::vector<bool>可能会有所帮助(即使它可能是特殊专业)。 -
“我不能使用向量”,所以写你自己的(简化的)版本。
-
那么理想情况下,
Flight的特殊成员可能会被默认 :-)
标签: c++ multidimensional-array dynamic 2d