通过组合访问 parent 类
Accessing parent classes through composition
在我的程序中,我有一个非常简单的结构来表示 RPG 游戏中的地图。我有一个地图 class,带有一个二维数组 "Grid",由区域 object 组成,如下所示:
#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();
}
}
}
我希望区域 object 能够从地图 object 访问某些值,而且我读到我可以包括对地图的引用 class 在构建区域 object 时,以便它可以返回它的 parent。但是要做到这一点,我必须
#include "Map.h" in Area.h,这将创建一个包含循环,并且通常不是很好。那么我将如何在每个区域 object 中注入对该区域 parent 的引用?提前感谢您的帮助。
// 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;
}
在我的程序中,我有一个非常简单的结构来表示 RPG 游戏中的地图。我有一个地图 class,带有一个二维数组 "Grid",由区域 object 组成,如下所示:
#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();
}
}
}
我希望区域 object 能够从地图 object 访问某些值,而且我读到我可以包括对地图的引用 class 在构建区域 object 时,以便它可以返回它的 parent。但是要做到这一点,我必须 #include "Map.h" in Area.h,这将创建一个包含循环,并且通常不是很好。那么我将如何在每个区域 object 中注入对该区域 parent 的引用?提前感谢您的帮助。
// 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;
}