C++ 通过派生对象访问基类的虚函数
C++ Access a Base Class's virtual function through a derived object
我正试图为我的高级编程课程创建一个基于文本的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;
};
不清楚您想在哪里访问基类的方法,但您可以这样做:
_map->Map::populateMap(); // calls base class member function
_map->populateMap(); // calls derived class member function
如果您需要ColorMap实现来扩展基本实现:您的ColorMap的populateMap()实现应该是:
void ColorMap::populateMap() {
Map::populateMap(); // first call the base class
// now do your things...
}
如果你有
Map *m=new ColorMap(...);
m->populateMap();
这将调用派生类方法。。。。但是,在该方法中,您仍然可以访问该方法的父类版本,并在代码的其余部分之前、之后或中间运行它。
让Colormap构造函数将参数传递给基构造函数。一旦基类中出现virtual延迟,派生类就不需要再次声明virtual。
相关文章:
- 虚拟基类函数中派生类的大小
- 无法访问基类函数 C++
- 如何使派生类函数在调用时始终调用相同的基类函数?
- C++虚拟函数:基类函数是调用的,而不是派生的
- Qt基类函数定义
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- C++ - 基类函数指针调用的替代方法
- 什么更有效率?在重载函数中或通过在基类函数中检查对象类型来实现
- 重载基类函数是不好的做法吗?
- 在 qml 中公开基类函数
- 调用基类函数时强制使用类名?
- 如何判断哪个派生的类对象称为基类函数
- 获取具有基类函数的派生类
- 有没有办法从基类函数参数中推断出模板参数
- 私有非虚拟基类函数被称为派生类中的函数
- 模板基类函数成员的别名
- 如何用相同的签名从main调用基类函数
- C++ 如何从 main 调用派生的基类函数
- memcpy派生类到基类,为什么还调用基类函数