静态类或实例指针

时间:2017-02-28 11:13:45

标签: c++ class oop c++11 static

背景故事:

目前我有一系列与游戏相关的三个课程。我以前使用Unity制作游戏,您可以使用所有代码都可访问的功能访问相机等组件。但是,我当前的设置依赖于跨越其他类发送的每个类的实例。请参阅以下内容:

class World{

};
class Game{
     Camera* camera;
     World* world;
};
class Camera{
     Game* game;
     World* world;
};

问题:

  • 这是设计不良的结果还是有时候设置如此 这是有道理的吗?

  • 我宁愿在我当前的设置中使用静态类 将澄清代码,每个类只有一个实例 曾经使用过?

  • 使用静态类有哪些可能的缺点 实例

编辑:为什么他们需要互相访问。

为什么相机需要世界: 由于需要从相机的角度渲染世界,因此相机需要访问世界。相机会根据所看到的内容触发世界渲染。渲染是通过相机中的各种方法触发的,例如移动时。

当绘制相机时,它会绘制它所看到的内容,例如世界。为了吸引世界,相机需要进入这个世界。

为什么相机需要游戏: 游戏具有诸如FPS之类的值,相机使用它来显示调试信息的叠加。

2 个答案:

答案 0 :(得分:5)

紧密耦合的三个类确实提出了一些有问题的设计选择。尝试更改代码,以便例如Camera获取指向World的指针或引用,仅传递给它实际需要处理World的方法。还要考虑CameraWorld是否确实需要指向Game的指针。从概念上讲,如果Game有一个World并且有一个Camera而不是所有三个对象归其他人(谁)拥有,那么会更有意义吗?

GameCamera之间的关系仍然只建议您将Game或更好的相关数据FROM Game作为方法参数传递给{{1}绘制方法。

答案 1 :(得分:1)

如果你有任何类的静态(全局)实例,它可以从任何地方访问,最终可能会出现“大泥泞”,这使得很难跟踪什么用途或需要什么。< / p>

所谓的“SOLID”原则的一个想法是

  

“细节应取决于抽象”

现在引入额外的抽象基类(或支持它们的语言中的接口)可能看起来更加复杂,但它可能会帮助您找到您需要从哪里获得的每个对象的哪些部分,并允许您说引入另一个{{1将来。

一种方法可能如下:

Game

(对于依赖性倒置原则),如this question

中所述

对于你正在做的事情来说,这看起来似乎有些过分,但是让你更接近“一切都依赖于抽象的东西”,而不是“一切都依赖于其他一切”。