【c++基础】3.注释、头文件、名字空间
来源:互联网 发布:广发证券炒股软件 编辑:程序博客网 时间:2024/06/08 10:52
【一】注释
注释是为我们写的代码添加批注的一种方法,无论代码是给别人看,还是给以后的自己看,写注释都是一种好习惯,有助于提高代码的可读性,注释在编译的时候并不会被包含到程序中,c++中注释的方法有两种:
单行注释:
用“//”进行单行注释,每一行第一个“//”后面的内容将别注释掉,如:
int stu_num=9;//***///stu_num表示学生数量,初始化为9***
多行注释:
使用“/*注释内容*/”进行多行注释,“/*”和”/*”之间的内容将被注释掉,如:
int a;/*int b;int c;这部分都将被注释掉*/
【二】头文件
参考自博文:连接
1.为什么引入头文件?
C/C++编译器采用的是分离编译模式。在一个项目中,可以有多个源文件,在这些源文件中常常会使用到很多相同的内容,如用户自定义数据类型、全局变量等。如果在每个文件中都重新定义一次这些内容工作量太大,因此,将这些内容抽取出来放到头文件中,然后在每个需要到这些内容的地方包含这些头文件,就可以避免这些内容的重复书写。头文件的作用不仅如此,它还有很多作用,具体表现在以下三个方面:
(1)加强类型检查,提高代码得类型安全性。
在C++中使用头文件,对自定义类型的安全也是非常重要的。虽然,在语法上,同一个数据类型(如一个class)在不同的源文件中书写多次是允许的,程序员认为他们是同一个自定义类型。但是,由于用户自定义类型不具有外部连接特性,编译器并不关心该类型的多个版本之间是否一致,这样会导致逻辑错误的发生。考察如下程序。
//source1.cpp#include <iostream>class A{private: char num;public: A(); void show();};void A::show(){ std::cout<<num<<std::endl;}void see(A& a){ a.show();}//end source1.cpp//source2.cpp#include <iostream>class A{private: int num;public: A(){num=5;}; void show();};void see(A& a);int main(){ A a; see(a); getchar();}//end source2.cpp
这个程序能够顺利通过编译并正确的运行,在在构成项目的两个源文件中,对class A的定义出现了一点小小的不一致。两个源文件中,成员变量num一个是char类型,一个是int类型,这就导致了输出了一个特殊得字符。
如果将class A的定义放到一个头文件中,用到class A的源文件都将这个头文件包含进来,就可以绝对保证数据类型的一致性和安全性。
(2)减少代码的重复书写,提高编写和修改程序的效率。
在程序开发的过程中,对某些数据类型或者接口进行修改是难免的,使用头文件,只需要修改头文件中的内容,就可以保证修改在所有源文件中生效,从而避免了繁琐易错的重复修改。
(3)提供保密和代码重用的手段。
头文件也是C++代码虫蛹即只中不可缺少的一种手段,在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件的接口声明来调用库功能,而不必关心接口是怎么实现的,编译器会从库中提取相应的代码。
所以,设立头文件的目的主要是:提供全局变量、全局函数的声明或提供公用数据类型的定义,从而实现分离变异或代码复用。
2.头文件包含
使用以下语法进行头文件包含,包含头文件之后,该文件就可以使用头文件中的内容了。
#include <iostream> //c++最新标准中的头文件#include <stdio.h> //c风格的头文件#include <cstdio> //c++风格头文件,与stdio.h内容相同#include "my_headfile" //用户自定义头文件,使用""包含
在实际应用中,如果是c++编程,建议使用c++风格的头文件包含方式。
3.避免头文件重复包含
C++语言中的内容,有的在项目一级的范围内只能出现一次,如全局变量的定义、函数的定义等。有的可以在项目一级的范围出现多次,但在一个源文件中只能出现一次,如class的定义等;还有的在一个源文件中可以出现多次,如函数声明等。注意,项目一级可以理解为项目的所有源文件。由于事先无法无法确定头文件的内容,应该不免在一个源文件中对同一头文件包含多次,以免引起重定义错误。考察如下程序。
//header1.hclass A{int num;public:A();void show();};//end header1.h//header2.h#include “header1.h”class B{A a;public: void disp();};//end header2.h//main.cpp#include <iostream>#include “header1.h”#include “header2.h”A::A(){ num=5;}void A::show(){ std::cout<<num<<std::endl; }int main(){A a;a.show();}//end main.cpp
这个程序无法通过编译,原因是class A在源文件main.cpp中被定义了两次,这是由于头文件header2.h包含了header.1,在源文件main.cpp包含了header2.h,也包含了header1.h,这就导致header1.h在main.cpp中被包含了两次,也就造成了class A重复定义。
一个头文件被别的源文件重复包含是经常发生的,如何避免某个头文件被重复包含呢?利用条件编译轻松解决。在头文件的开始加入:
#ifndef HEADER_NAME#define HEADER_NAME
在头文件的结尾加上:
#endif
HEADER_NAME指的是头文件的名称,条件编译指令“#ifndef HEADER_NAME“和“#endif”的意思是:如果条件编译标志HEADER_NAME没有定义的话,就编译#ifndef和#endif之间的程序段,否则就忽略它。课件,头文件header1.h只要被包含一次,条件编译标志宏HEADER_NAME就会被定义,这样就不会被再次包含。
【三】名字空间
名字空间(namespace)是由标准C++引入的,是一种新的作用域级别。原来C++标识符的作用域分为三级:代码块({…}和函数体)、类域和全局作用域。如今,在类作用域和全局作用域之间,C++标准又添加了名字空间域这一个作用域级别。
上面讲了头文件包含的内容,头文件包含给我们带来了很多方便之处,但是也有潜在的缺点,那就是会造成命名冲突,名字空间的引入是为了避免代码重用中的命名冲突。
名字空间的使用方法:
#include <iostream>using namespace std;//一次性引入所有std头文件,不建议这么使用,因为这样相当于取消了名字空间的作用int main(){int a;cin>>a;cout<<a<<endl;return 0;
#include <iostream>using std::cin;//只引入std名字空间中的cin名字int main(){int a;cin>>a;std::cout<<a<<endl;//cout时因为没有被引入,所以使用时需要加入名字空间前缀进行限制return 0;
名字空间的内容和用法还有很多,鉴于是基础篇,就先只介绍一下用法,后面还会有文章继续介绍名字空间的其他用途。
- 【c++基础】3.注释、头文件、名字空间
- C/C++头文件注释
- C/C++头文件注释
- C/C++头文件注释
- C++名字空间与包含头文件的方法
- jdom如何生成名字空间,用JDOM生成头注释的问题
- C程序头文件注释格式
- C程序头文件注释格式
- c/c++文件头注释格式
- C语言基础-头文件
- C库头文件的C++名字与C名字的区别
- 《我的第一本c++书》学习笔记:STL常用头文件和名字空间
- 头文件注释
- 头文件注释
- C++——名字空间
- 关于包含头文件而编译时却一个未定义错误的原因(未使用命名名字空间)
- toc文件头格式注释
- 不同的头文件注释
- centos mysql操作
- 三大框架
- 深入浅出MyBatis-Sqlsession
- 自然语言处理入门(2)——中文文本处理利器snownlp
- swift 3.1. uiwebview 加载网页
- 【c++基础】3.注释、头文件、名字空间
- User management
- 在Eclipse中安装Hibernate Tools
- Problem B: 平面上的点和线——Point类、Line类 (III)
- POJ 1687 Buggy Sat 笔记
- 最新Retrofit + RxJava + MVP
- java实现serializable接口的作用
- hdu 5996 dingyeye loves stone
- 制作多周期CPU(分析)