Не меняется указатель в массиве
есть 3 класса: Board(Шахматная доска), Figure(Класс для шахматной фигуры), Swan(Пешка).
Swan является дочерним элементом класса Figure
В классе Board я определяю массив указателей:
Figure *board_m[8][8];
Класс Figure:
class Figure {
public:
char print_f() {
return ' ';
}
char print_c() {
return ' ';
}
private:
bool exist;
};
Класс Swan:
class Swan: public Figure {
public:
Swan(int colorr, Figure *flashboard[8][8]) {
**board_m = *flashboard;
color = colorr;
cout<< "Swan on desck" <<endl;
exist = true;
}
char print_f() {
return 'S';
}
char print_c() {
return get_color(color);
}
private:
Figure **board_m[8][8];
int color;
bool exist;
};
В самом начале массив board_m я заполняю экземплярами класса Figure
Но потом, когда я заменяю один из элементов массива на экземпляр класса Swan, он все также использует метод из родительского класса Figure
delete board_m[x][y];
board_m[x][y] = new Swan(color, *&board_m);
Что надо изменить чтобы он все-таки использовал метод из класса Swan?
Ответы (1 шт):
Автор решения: Alik 46
→ Ссылка
Как написал в комментариях, методы надо сделать виртуальными
Измененный класс Figure:
class Figure {
public:
virtual char print_f() {
return ' ';
}
virtual char print_c() {
return ' ';
}
private:
bool exist;
};
Измененный класс Swan:
class Swan: public Figure {
public:
Swan(int colorr, Figure *flashboard[8][8]) {
**board_m = *flashboard;
color = colorr;
cout<< "Swan on desck" <<endl;
exist = true;
}
virtual char print_f() {
return 'S';
}
virtual char print_c() {
return get_color(color);
}
private:
Figure **board_m[8][8];
int color;
bool exist;
};