一、#include
指令的原理
编译器在处理每个cpp之前,首先进行一个预处理:将所有的#include
行替换成头文件的具体内容,形成一个中间文件,然后再对这个中间文件进行编译。
这个在编译之前的预处理过程 ,称为“预编译”过程。
注:如果头文件里还有#include
,则反复替换,直到没有任何#include
指令为止。
二、预处理指令
预处理指令不是语句,行尾不要加分号
// #define代入的是文本,而不是值
// 只要把文本原番不动地代入后,检查一下语法是否正确,程序是否合乎逻辑
#define PI 3.14
#define MAX(a,b) a>b ? a : b
// 要定义一个值,通常外加一个小括号
#define MUL (1 + 2)
#define
的取代办法
在程序中应该尽量少用这两种#define
取代的办法是:
(1) 定义变量或const常量
const double PI = 3.14;
(2) 定义inline函数
inline int max(int a, int b)
{
return a>b ? a: b;
}
三、头文件与源文件分离
class的分离式写法
把class
的成员函数的定义写在class
之外,即class
的大括号的外面
/////////// main.cpp ////////////
class Object
{
public:
int x;
void Test(); // (1) 成员函数的声明
};
void Object::Test() //(2) 成员函数写在外边,加上类名限定
{
}
这种写法:
- 成员变量:还是写在类里面
- 成员函数:在类里保留其函数声明,而函数的定义写在类体之外。
- 写在外面的时候,要加上类名限定(
Object::
)
其中,::
可以理解为是表示范围的符号
分开为头文件和源文件
按照一贯的原则:类型定义写在头文件.h
里,函数实现写在源文件.cpp
里
/////////// Object.h ////////////
class Object
{
public:
int x;
void Test();
};
/////////// Object.cpp ////////////
#include <stdio.h>
#include "Object.h"
void Object::Test()
{
printf("x is %d \n", x); // 仍然可以省略this->
}
网友评论