05//11/2020
类和文件
文件是一个程序的物理结构的核心,正确地组织文件是实现高效的物理结构的第一步。
分离式编程
头文件(.h)和实现文件(.cpp)的分离
优点:
- 便于对文件的浏览,无需看实现部分,同时根据文件名就可以找到类名字。
- 处理了缩短编译时间。因为当修改bug的时候,就需要编译很多次,如果文件是分离的,基本只需要编译改动的文件。
头文件
头文件有什么
- 头文件暴露了私有变量与私有函数的信息,这些信息只在实现部分有用,其实无需在头文件中
include指令
打开指定文件,读取具体内容,并把它们插入到#include语句所在的地方。
问题
- 重复定义
//Game.h
#define MAX_PLAYER = 10
//Game.cpp
#include "Game.h"
//other.h
#include "Game.h"
//other.cpp
#include "Game.h"
#include "other.h"
//#define MAX_PLAYER = 10 将会被调用两次,报错重复定义
解决
//C++标准ifndef define 和 endif
#ifndef GAME_H
#define GAME_H
//或者使用pragma预编译指令
#pragma once //不仅编译一次,而且可以防止文件被打开两次
#endif
pragma缺点
不是所有跨平台编译器可以识别它,不是C++标准的一部分。最主要pragma的特点是防止文件被打开两次。可以与ifndef一起使用
头文件的包含指令
- 不必要的include需要删除
头文件的包含指令的唯一原因是,头文件中要用到某些在包含文件中声明的内容。
- 继承是必须包含父类的头文件的,因为需要看到父类的全部内容才能正确构造派生类
- 如果没有继承,只使用其他类的指针和引用,只需要使用前向声明。
//C.h
class A;
class C
{
private:
A* mA1;
A& mA2;
//A mA3; //错误的
};
//注意当从文件中删除#include 语句时,实现文件需要添加它们
//C.cpp
#include "C.h"
#include "A.h"
头文件放在.cpp实现文件的好处
- 避免在编译过程中,打开头文件多次
预编译的头文件
C++11有着很多标准库需要引用,有时候必须引用很多次,所以需要一个预编译的头文件来只对它们编译一次的操作。
问题
- 虽然只编译一次,但是有时候没用的头文件也会被包含进去。
C++游戏编程第十五章