我有一个理论问题而不是错误报告.
我是一名新手C++程序员,试图将其推广
使用VC++ VS2008编译器
我经常发现自己想知道为什么我想在头文件中采取一些行动.
例如,看看这个代码块:
#include "DrawScene.h"
#include "Camera.h"
#include "Player.h"
#include "Grid.h"
#include "InputHandler.h"
#include "GameState.h"
class Controller
{
public:
private:
public:
Controller();
~Controller(){}
void Update();
private:
};
Run Code Online (Sandbox Code Playgroud)
和连接CPP文件,controller.cpp一起
#include "stdafx.h"
#include "glut.h"
#include "Controller.h"
#include <iostream>
Grid* grid_ptr = new Grid();
InputHandler* inputHandler_ptr = new InputHandler();
DrawScene* drawScene_ptr = new DrawScene();
GameState* gameState_ptr = new GameState();
Controller::Controller()
{
}
void Controller::Update()
{
}
Run Code Online (Sandbox Code Playgroud)
什么是决定哪些包括去哪里的好方法?到目前为止,我一直在使用"无论什么工作"的方法,但我发现它有点不专业.
现在即使你可以说我的代码有X语法错误和设计缺陷,请这样做,但重点我会欣赏有关使用.h VS .cpp文件的信息.
为什么还有这样的设计呢?在制作任何基于OOP的C++程序时,总是会轻易踩着什么是陷阱和陷阱?
是什么引发了这个问题,因为我想通知读者头文件中存在控制器中存在的对象,但是如果不将它们设置为静态,则分配这些未初始化的对象似乎是不可能的.
注意:我源于C# - > C++,可能有助于了解.这就是我对代码的看法.
提前谢谢您的努力!
编辑:26/08/2010 18:16
所以构建时间是良好包含的本质.还有更多需要谨慎吗?
zwo*_*wol 16
这是我的个人意见,而不是一致的最佳实践,但我建议的是:在头文件中,只包括使头文件的内容编译而没有语法错误所必需的头文件.如果您可以使用前向声明而不是嵌套包含,请执行此操作.
原因是,在C++中(与C#不同,iiuc)没有出口控制.你包括从头部一切都会给includers可见的头,这可能是一大堆垃圾,你的界面的用户不应该看到的.
一般来说,标头应驻留在 cpp 文件中。对于标准库包含(可能还有第三个库包含),您可以将它们粘贴在标题中。但是,专门为您的项目定义的标头应尽可能放入 cpp 文件中。
其原因是编译时间和依赖性问题。每当您更改头文件时,编译器都必须重新编译包含该头文件的每个源文件。当您在另一个头文件中包含一个头文件时,编译器必须重新编译包含任一头文件的每个 cpp 文件。
这就是前向声明和 PIMPL(指向 IMPLementation 的指针,或不透明指针)模式流行的原因。它允许您将至少一些更改/实现移出头文件。例如:
// header file:
class SomeType;
class AnotherType
{
private:
SomeType *m_pimpl;
};
Run Code Online (Sandbox Code Playgroud)
不需要您包含“sometype.h”,而:
// header file
class AnotherType
{
private:
SomeType m_impl;
};
Run Code Online (Sandbox Code Playgroud)
做。编辑:实际上,如果您始终在包含“anothertype.h”的每个 cpp 文件中的“anothertype.h”之前包含“sometype.h”,则不需要在“anothertype.h”中包含“sometype.h”。
有时,将头文件移动到 cpp 文件可能很困难。那时,您需要做出决定 - 是否最好通过抽象代码来实现这一点,还是只添加包含更好?
| 归档时间: |
|
| 查看次数: |
2561 次 |
| 最近记录: |