Как изменить тип унаследованной переменной в производном классе? У меня есть следующие классы:переменная upcasting в производном классе C++
class Position;
class StonePosition;
class Position {
public:
Position() {}
};
class StonePosition : public Position {
int count;
public:
StonePosition(const int count) { this->count = count; }
int getCount() { return this->count; }
void setCount(int count) { this->count = count; }
friend ostream& operator<<(ostream&, StonePosition);
};
class Board {
protected:
Position* crrPos;
public:
Board() { }
Position* getCrrPos() { return crrPos; }
void setCrrPos(Position* pos) { crrPos=pos; }
};
class StoneBoard : public Board {
public:
StoneBoard(const int &count) { this->crrPos=new StonePosition(count); } //<----------------
StonePosition* getCrrPos() { return (StonePosition*)crrPos; }
void setCrrPos(StonePosition* pos) { crrPos=pos; }
};
Место, в котором проблема отмечена стрелкой. Мне нужно изменить тип переменной с позиции на StonePosition в классе StoneBoard. Я нашел вариант, который можно использовать для повышения эффективности, но он работает только в рамках одного метода, и мне нужно изменить переменную для всего класса.
Проблема решена, посмотрите на мой ответ.
'template class TBoard {..}' может помочь. –
Jarod42
C++ не является гибким. Вы не можете изменить тип переменной. Вот почему существовали шаблоны https://en.wikipedia.org/wiki/Template_(C%2B%2B) –
Зачем вам нужно менять тип? Кажется, вы могли бы просто «dynamic_cast» в «StonePosition» всякий раз, когда вам это нужно (как вы это делали с 'getCrrPos' – lcs