当前位置: 首页 > 知识库问答 >
问题:

象棋游戏-抽象类中的错误

马冯浩
2023-03-14
#pragma once
#include <string>
#include <iostream>
using namespace std;


class Chess_tool
{
public:
    Chess_tool(string color, char name); 
    virtual bool legal_movement(int source[], int dest[]) const = 0;

private:
    string _color;
    char _name;
};

我试图创建象棋游戏,所以我为象棋工具创建抽象类(皇后,国王,车...)我还创建了king工具来检查我的代码:

#pragma once

#include "Chess_tool.h"

class King : Chess_tool
{
public:
    King(string color, char name);
    virtual bool legal_movement(int source[], int dest[]);
};

并创建game_board类:

#pragma once
#include "Game_board.h"
#include "Chess_tool.h"
#include <iostream>

#define BOARD_SIZE 8
using namespace std;

class Chess_tool;
class Game_board
{
public:
    Game_board();
    ~Game_board();
    void move(string panel);


protected:
    Chess_tool* _board[BOARD_SIZE][BOARD_SIZE];
};

问题是,当我尝试向矩阵添加对象时,它的show me错误:1 IntelliSense:不允许抽象类类型“King”的对象:纯虚函数“chess_tool::legal_movement”没有覆盖器

#pragma once
#include "Chess_tool.h"
#include "Game_board.h"
#include "King.h"
using namespace std;

enum Turn { WIHTE, BLACK };

class Manager : Game_board
{
public:
    Manager();
    ~Manager();
    virtual bool legal_movement(int source[], int dest[]) const = 0;
};

....

#include "Manager.h"
Manager::Manager()
{
    _board[0][0] = new King();
}

共有1个答案

罗安宁
2023-03-14

基类中的成员函数是常量限定的,而不是派生类中的成员函数。

所以这些通过继承不是相同的函数。您声明了一个新的虚函数,而不是重写第一个虚函数。

const添加到第二个函数中,使其实际上覆盖基类函数。

  • 同名
  • 相同的返回类型
  • 相同的参数计数和类型
  • 相同的常量限定(这里的情况)
  • 其他一些小事情(例如,兼容异常规范)

如果不满足任何条件,则为编译器创建一个非常相似但不同的函数。

对于C++11,您应该对要重写的函数使用override,这样编译器就会知道您的意图并告诉您您犯了一个错误。例如:

virtual bool legal_movement(int source[], int dest[]) override;
//                                                    ^^^^^^^^
 类似资料:
  • 我正在学习Javascript,并作为一个项目作业在其中制作象棋游戏。我已经为Rook,Pawn,Knight和Bishop的移动编码了逻辑。现在我被女王运动困住了。一个女王的走位基本上都涉及到毕晓普和鲁克的走位逻辑。 我想做的是,当皇后被移动时,检查源磁贴的文件是否与目标磁贴相同。如果相同,则调用Rook的代码移动逻辑,否则调用Bishop的代码移动逻辑。例如,如果皇后被放置在d4(源平铺),并

  • 本文向大家介绍Javafx实现国际象棋游戏,包括了Javafx实现国际象棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Javafx实现国际象棋游戏的具体代码,供大家参考,具体内容如下 基本规则 棋子马设计“日”的移动方式 兵设计只能向前直走,每次只能走一格。但走第一步时,可以走一格或两格的移动方式 请为后设计横、直、斜都可以走,步数不受限制,但不能越子的移动方式。 车只能横向

  • 本文向大家介绍JS小游戏之象棋暗棋源码详解,包括了JS小游戏之象棋暗棋源码详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考。具体如下: 游戏运行后如下图所示: Javascript 部分: 完整实例代码点击此处本站下载。 相信本文所述对大家javascript游戏设计的学习有一定的借鉴价值。

  • 我列出了这两种游戏的相似之处,目的是可能将其扩展到国际象棋,但对我的设计提出质疑。 相似点 件-物料(行、列)在板上的位置 板-nxn片格 游戏-包含棋盘和玩家列表 播放机-播放机名称 差异 在checkers中,您可以在不同的方向上移动,因此我创建了一个名为Checker的独立抽象类,它继承了Piece,并实现了一个返回pieces移动的Moveable接口。所以棋子和国王必须实施这个方法,提供

  • 我刚刚学习了Android和Java编程(里面非常noob),我想问一些关于Android编程和Socket服务器的问题。 我得到一个任务,创建一个简单的国际象棋应用程序(不包括AI),棋子的位置将从TCP套接字中检索: 服务器:xinuc.org 端口:7387 我被告知使用Socket Persistent,因为服务器会在每秒更新典当的位置,典当的位置将以这种格式发送 [卒典][横位][竖位]

  • 我目前正在尝试写一个能玩象棋游戏的人工智能。为此,我使用了minimax算法的一种变体,该算法迭代每一个可能的移动,然后假设深度为N时,对手(和他们)将以最佳方式进行N个移动。此外观的伪代码如下所示: 当调用“移动”时,它会检测是否拍摄了一幅作品,然后为该作品生成一个分数,该分数被保存到变量“温度”中。对于深度为2的情况,我简单地调用另一个Depth1方法,但改变颜色。对于深度为3的情况,我再次调