【发布时间】:2016-10-11 19:21:09
【问题描述】:
如何更改派生类中继承变量的类型? 我有以下课程:
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; }
};
问题用箭头标记的地方。 我需要在 StoneBoard 类中将变量的类型从 Position 更改为 StonePosition。我找到了一个可以使用向上转换的选项,但它只能在单个方法中工作,我需要更改整个类的变量。
问题解决了,看我的回答。
【问题讨论】:
-
template <typename TPos> class TBoard { ..}可能会有所帮助。 -
c++ 没有那么灵活。您不能更改变量的类型。这就是为什么
Templates存在en.wikipedia.org/wiki/Template_(C%2B%2B) -
为什么要改类型?似乎您可以在需要时将
dynamic_cast转换为StonePosition(就像您对getCrrPos所做的那样 -
@lcs 因为我需要在 StoneBoard 类中更改 StonePosition 上的变量 Position 的值
-
@Nawy
dynamic_cast用于将父类型指针安全地转换为子类型指针。不要使用 C 风格的演员表。它们不安全。
标签: c++ class derived-class upcasting