C++ 通过派生对象访问基类的虚函数

C++ Access a Base Class's virtual function through a derived object

本文关键字:基类 函数 访问 对象 派生 C++      更新时间:2023-10-16

我正试图为我的高级编程课程创建一个基于文本的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。