C++头文件的一些笔记

来源:互联网 发布:算法就是程序 编辑:程序博客网 时间:2024/06/11 13:42

顶层作用域:

顶层作用域就是从声明点延伸到源程序文本结束

命名空间:

如果整个文件都是一个命名空间,直接在头部using就可以,比如常用的

using namespace std;

如果是局部使用这个命名空间的话是

namespace std {    ...}

头文件

首先规范应该是:
头文件(a.h):声明函数或者类
与头文件命名相同(没有必要,但是为了规范)的cpp文件(a.cpp):头文件中声明的函数的实现 (该cpp的头部要include头文件)
自己的代码(b.cpp)使用头文件的时候,直接include头文件
编译的时候:

g++ a.cpp b.cpp

编译时链接a.h和a.cpp(为什么说是链接呢?因为函数的实现是在a.cpp,但是自己的代码只包含了a.h)

举个例子:

只有函数的头文件:

Car.h:

#include <iostream> //为了实现函数的时候cout会用到void print();

Car.cpp:

#include "Car.h"using namespace std;void print () {    cout << "123\n";}

Test.cpp:

# include "car.h"using namespace std;//void print();     int main() {    print();    cout << "end" << endl;}

基本用法如上;
注意的是,我在Car.h里面include了iostream,所以我的Car.cpp里可以直接用cout, 同理,在Test.cpp里也可以直接用;
但是我们自己写代码会习惯性的加上

#include <iostream>

会不会重复呢?
同样我们去看看源码,路径:

/usr/include/c++/4.2.1/iostream

是不是看到了开头两行和最后一行是:

#ifndef _GLIBCXX_IOSTREAM#define _GLIBCXX_IOSTREAM 1.........#endif /* _GLIBCXX_IOSTREAM */

_GLIBCXX_IOSTREAM仅作为标识符,没有实际意义;
如果我们在定义头文件的时候也在头和尾加上这样的标识,那就不怕重复包含了,所以我们自己加上iostream也无所谓;比如说刚刚的a.h可以这样定义:

#ifndef TEST#define TEST#include <iostream>void print();#endif

然后上述的Test.cpp里的第4行的注释,如果我想要重复声明一次这个函数可以吗?结果是可以的,但是只能是类外的函数,因为类函数只能在类内声明
;但是所有的函数只能定义一次(不是重载)

类头文件:

举个例子:
Car.h:

class Car {    private:        int size;        int price;    public:        Car(int, int);        Car();        int getSize();        int getPrice();};

Car.cpp:

#include "Car.h"Car::Car(){}Car::Car(int s, int p) {    this->size = s;    this->price = p;}int Car::getSize() {    return this->size;}int Car::getPrice() {    return this->price;}

Test.cpp:

# include <iostream># include "car.h"using namespace std;int main() {    Car a(5, 8);    cout << a.getSize() << endl;}

类比一下,其实也不难吧~

1 0
原创粉丝点击