【发布时间】:2019-12-18 20:48:09
【问题描述】:
我有一个班级名称Piece,其中有许多子班级,例如Rook、Knight、King 等...
Piece 类有一个名为Move(int x, int y) 的虚函数,所有子类都继承了这个函数。
现在我有了另一个函数,我们称之为foo(Piece& src, Piece& dest)。 foo() 这样调用函数move():
int foo(Piece& src, Piece& dest)
{
int moveCode = src.move(dest.getX(), dest.getY());
// Rest of the code ...
}
函数foo() 有时会获取knight 类作为参数,或King 类或其余子类。
我的问题是当我调用move() 时,我希望它从子类调用重写的move 函数,而是从基类Piece 调用move 类。
有没有办法让src.move()调用子函数?
Piece.h:
class Piece
{
protected:
int _pieceTypeIndex;
int _pieceColor;
int _x;
int _y;
public:
Piece();
Piece(int x, int y);
Piece(int x, int y, int pieceTypeIndex, int pieceColor);
virtual int move(int dest_x, int dest_y);
int getPieceTypeIndex() const;
int getPieceColor() const;
void setPieceTypeIndex(int pieceTypeIndex);
void setPieceColor(int pieceColor);
int getX();
int getY();
void setX(int x);
void setY(int y);
Piece& operator=(Piece& other);
};
子类代码(Rook.h):
class Rook : public Piece
{
public:
Rook(int x, int y, int pieceTypeIndex, int pieceColor);
virtual int move(int dest_x, int dest_y);
};
【问题讨论】:
-
@Mat 抱歉,这是我在这里写的代码中的错误,
Board& board不在代码中。我被黑了,不小心复制了它。我现在解决了这个问题。 -
无关:我认为不需要赋值运算符。当您不需要打开可避免错误的可能性时,编写赋值运算符。如果您出于上述原因需要它,那么the Rule of Three 建议您有一个复制构造函数和一个析构函数。
-
@0xBlackMirror 你有没有从你得到的答案中得到什么?
标签: c++ class oop inheritance