C++ 如何安排节目?

C++ 如何安排节目?,c++,layout,C++,Layout,我正在做一个阿尔卡诺德克隆人。这是我提出的程序布局: source.cpp // few lines App class // has constants APP_WIDTH and APP_HEIGHT Ball class // has constant RADIUS Brick class Paddle class 现在我想在比赛开始时把球放在窗口的中心。通常我会这样做: Ball::Ball (App &app)

我正在做一个阿尔卡诺德克隆人。这是我提出的程序布局:

source.cpp // few lines
     App class // has constants APP_WIDTH and APP_HEIGHT
         Ball class // has constant RADIUS
         Brick class
         Paddle class
现在我想在比赛开始时把球放在窗口的中心。通常我会这样做:

Ball::Ball (App &app)
{
    circle.setPos(app->WINDOW_WIDTH/2-RADIUS/2,app->WINDOW_HEIGHT/2-RADIUS/2)
}
但是ball班对这个应用一无所知

我是否需要设置
APP\u WIDTH
APP\u HEIGHT
全局变量

或者我需要将当前的应用程序布局颠倒过来,以便Ball类有
#include“app.hpp”
语句吗

编辑:或者我需要在app类中声明ball、brick和blade类吗?但是我在哪里定义它们呢?在同一个应用程序类中?然后标题变得太大了

也许互联网上有一些关于程序布局主题的好教程?我没有找到任何

问题2:
如果“ball没有理由知道任何关于app类的信息”

因为问题似乎是“ball无法访问app类的私有成员”,那么类为什么需要受保护的变量呢

getter是返回私有字段值的公共方法

如果这样做,您可以像这样访问这些成员的值

circle.setPos(app->GetWidth()....
您的getter可能与以下内容类似

公共int GetWidth() { 返回此.APP_宽度;
}游戏对象没有理由知道他们所属的
应用程序的任何信息。当它需要来自
App
的任何信息时,它应该直接从
App
接收这些信息。这可以通过setter方法(当应用程序以后可以更改属性时,如球的位置时,建议使用该方法)或构造函数(对于不更改的对象,如块的位置,建议使用该方法)。

球应该有一个SetPosition(x,y),应用程序通过上述计算调用该SetPosition。在内部,此设置位置将如上所述设置圆圈,因此ball对应用程序一无所知。

你说ball对应用程序一无所知是什么意思?这不是作为参数传递的吗?App类包括ball类,然后创建一个。这就是全部。Ball无法访问app类的私有成员。出于某种原因,这里好像缺少类。我的内部设计师希望有一个
Sprite
类和一个
Stage
。各个部分就像游戏板上的棋子一样在舞台上移动精灵。好的,我明白了。但是,在app类中声明ball、brick和pable,并使app_宽度和app_高度受保护的常量怎么样?这难道不能更清楚地表达所有权结构吗?但是,当我在应用程序中创建这些子类时,会出现不完整的类型错误,所以我必须在同一个应用程序头中定义它们,然后它会变得太大@MariusMacijauskas怎么样?好吧,我会用不同的方式问。如果我们使用getter方法,为什么类需要受保护的变量?@MariusMacijauskas:
protected
基本上为子类声明了一个接口。这与此无关。但是关于为什么有私有变量……例如,请注意没有
SetWidth()
函数。您可以拥有实际可变的变量(例如,如果窗口可以调整大小),而不必担心其他代码会随意更改它们。@MariusMacijauskas My
protected
继承变量的类可以访问这些变量。它与获取和设置没有多大关系