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
- C语言头文件的一些规则
- C中头文件的一些问题
- C++头文件的一些笔记
- c中的一些头文件
- linux中常用C/C++一些头文件的作用
- linux中常用C/C++一些头文件的作用
- Linux中常用C/C++一些头文件的作用
- C语言的一些预处理指令和系统头文件
- Linux中常用C/C++一些头文件的作用
- Linux中常用C/C++一些头文件的作用
- C语言头文件和库的一些问题
- 关于C语言头文件的一些认识
- Linux C 一些函数 所属的头文件
- 关于C语言头文件保护的一些认识
- Linux中常用C/C++一些头文件的作用
- Linux中常用C/C++一些头文件的作用
- 一些函数的头文件
- Linux的一些头文件
- How to fix a "Duplicated Symbols" error on binary files
- CSUOJ 1116 Kingdoms
- iOS APP性能优化
- dubbo-demo+简易监控中心安装+管理控制台安装
- viewpager实现图片轮播+小圆点跟着动
- C++头文件的一些笔记
- SQL_数据库基础试题(培训/已完结)
- 909422229__Mysql查询语句基本用法总结
- 程序猿媳妇儿注意事项
- stm32通过SPI与adc124s021通信读取ad
- POJ 3311 Hie with the Pie(状态压缩DP)
- 13. Roman to Integer
- Ajax-serialize()方法
- HDU 1702 (栈和队列的模拟)