C++头文件的一些笔记


顶层作用域:

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

命名空间:

如果整个文件都是一个命名空间,直接在头部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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值