我试图为我的Adv创建基于文本的RPG。编程课程,我对多态性有点不确定。我正在将它构建成碎片,目前我正在尝试根据之前的作业进行视觉显示,其中包括通过坐标将彩色字符绘制到控制台以创建地图。所以我有这个主要的:
#include "Map.h"
using namespace std;
int main()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
ColorMap* _map = new ColorMap(handle, "north");
}
我希望指向基类的函数populateMap,然后访问派生类的populateMap。这是参考标题
#pragma once
#include <Windows.h>
#include <string>
using namespace std;
class Map
{
public:
Map(HANDLE handle, string direction);
~Map(){};
virtual void update();
virtual void populateMap();
void drawPoint(int x, int y) const;
protected:
HANDLE mHandle;
char mMap[15][15];
char mWall;
char mSpace;
string mIncomingDirection;
};
class ColorMap : public Map
{
public:
ColorMap(HANDLE handle, string direction);
~ColorMap(){};
virtual void update();
virtual void populateMap();
void drawMap();
private:
int mColor;
};
答案 0 :(得分:2)
方法,但你可以这样做:
_map->Map::populateMap(); // calls base class member function
_map->populateMap(); // calls derived class member function
答案 1 :(得分:1)
如果你需要ColorMap实现来扩展基础实现:你的ColorMap的populateMap()实现应该是:
void ColorMap::populateMap() {
Map::populateMap(); // first call the base class
// now do your things...
}
如果你有
Map *m=new ColorMap(...);
m->populateMap();
这将调用派生类方法....但是,从该方法中,您仍然可以访问该方法的父类版本并运行它(在其他代码之前,之后或之间)。
答案 2 :(得分:0)
让Colormap构造函数将参数传递给基础构造函数。 一旦在基类中进行虚拟延迟,派生类就不需要再次声明虚拟。