如何在 c++ 中与另一个类共享变量
How do I share variables with another class in c++
我有两个类,播放器和控制器。 控制器具有主游戏循环,并包含一个玩家。 它还存储世界地图。控制器类通过调用 Player 类的各种方法(如 moveForward())将用户输入传递给播放器。 我现在正在实现冲突检测,为此,我需要一种方法让 Player 类查看世界地图,但这是在 Player 类所在的控制器类中。
换句话说:
struct Controller {
int worldMap[16][16][16];
Player p;
...
}
struct Player {
movePlayer() {
#How do I check world map here?
}
}
为简单起见,我们假设您要做的就是调用一个简单的函数(检查其他成员的工作方式相同,但会导致更复杂的示例):
void move(Player&);
如果您手头有对象,则只能访问非static
成员。如果你这样做,它就像
struct Player {
void movePlayer(Controller& controller) {
move(controller.p);
}
};
请注意struct
声明后面的;
,它是必需的。
另一方面,如果您有static
成员,它们对整个类都有效,因此甚至不需要对象:
struct Player {
void movePlayer();
};
struct Controller {
static Player p;
};
void Player::movePlayer() {
move(Controller::p);
}
注意声明出现的顺序:要声明类型 Player
的变量,您需要先声明 struct Player
。
由于您经常访问控制器,因此可以传入指向Player
的指针,然后将其分配给成员。
struct Controller {
int worldMap[16][16][16];
Player p;
...
Controller() {
p.setController( this );
}
};
struct Player {
Controller* mController;
movePlayer() {
mController->...
}
setController( Controller* controller ) {
mController = controller;
}
};
如果需要以较低的间隔访问它,则可以将引用传递到函数中。
Player::movePlayer( Controller* controller ) {
mController->...
}
传递movePlayer()
需要的数据作为引用参数:
void movePlayer(const int (&map)[16][16][16]) { ... }
如果movePlayer()
只需要访问worldMap
,则传递整个Controller
对象会很糟糕。
或者,您可以在 Player
对象本身中存储指向当前映射的指针:
struct Player {
// ...
private:
int* Location;
};
相关文章:
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- 如何将私有整数从A类传递到C 类B类的另一个INT变量
- 隐式指针变量,在自动定义中具有另一个指针变量
- 构建并使用使用另一个共享库的源文件中的共享库.(Rinside)
- 如何使一个成员变量等于在main()中设置的另一个成员变量
- 如何通过另一个int变量递增int变量
- 如何根据目标体系结构将共享库链接到另一个共享库
- 如何知道一个共享库是否取决于另一个共享库
- 如何将共享库嵌入到另一个共享库中
- 通过其他文件中的另一个全局变量使用类的全局实例
- 共享内存空间可以将数据(非POD)发送到另一个共享内存吗?
- 初始化整数成员变量会导致更改另一个成员变量的地址
- 链接到链接到另一个共享库的共享库会在退出时出错
- 将共享库链接到另一个共享库
- 将共享库与 Linux 中的另一个共享库链接
- 提取字符串的一部分并将部分放入字符数组和另一个字符串变量C++
- 在linux中使用另一个共享库构建共享库
- 通过c++中的functon访问另一个类变量
- 指针变量可以保存另一个指针变量的地址吗