通过组合访问父类

时间:2017-11-05 22:25:08

标签: c++ class composition

在我的程序中,我有一个非常简单的结构来表示RPG游戏中的地图。我有一个Map类,带有2d数组,“Grid”,由Area对象组成,如下所示:

 #pragma once
 #include "Area.h"

 class Map
 {
 public:
     Map();
     ~Map();

     Area Grid[10][10];
 };

然后在Map构造函数中:

 Map::Map()
 {
for (int y = 0; y < 10; y++) {
    for (int x = 0; x < 10; x++) {
        Grid[x][y] = Area();
    }
}
}

我希望Area对象能够从Map对象访问某些值,并且我已经读过,我可以在构造区域对象时包含对map类的引用,以便它可以引用回来它的父母。但要做到这一点,我必须这样做      在Area.h中#include“Map.h”,它将创建一个包含循环,并且通常不是很好。那么我将如何在每个区域对象中注入对该区域父项的引用?感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:1)

// Area.h
#pragma once
struct Map;

struct Area {
    Map* map = nullptr;
    Area() {}
    explicit Area( Map* m) : map(m) {}
};

请注意,您可能希望在Area.cpp(包括Map.h)中定义Area的某些功能。为了简化示例代码,我把它留了下来。

// Map.h
#pragma once
#include "Area.h"

struct Map
{
    Map();
    ~Map();

    Area Grid[10][10];
};

// Map.cpp
#include "Map.h"

Map::Map()
{
    for (int y = 0; y < 10; y++) {
        for (int x = 0; x < 10; x++) {
            Grid[x][y] = Area(this);
        }
    }
}

Map::~Map() {}

// main.cpp
#include "Map.h"
int main()
{
    Map m;
    return 0;
}