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

时间:2014-04-11 10:22:27

标签: c++ function polymorphism virtual

我试图为我的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;
};

3 个答案:

答案 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构造函数将参数传递给基础构造函数。 一旦在基类中进行虚拟延迟,派生类就不需要再次声明虚拟。