Не меняется указатель в массиве

есть 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;

};
→ Ссылка