1.第一个c++程序
先用C++来写一个Helloworld的程序:
#include <iostream> //预编译指令
using namespace std; //编译指令
int main() //函数头
{ //函数体
cout << "Hello world" << endl; //语句
int i; //声明一个变量
cin >> i;
cout << "your input is :" << i << endl;
return 0; //函数返回值
}
现在以第一个c++程序引出一些最最最基本的概念。
2.注释
c++有两种注释形式:
- 1.C++风格的
//
形式,用来进行单行注释; - 2.C风格的
/**/
注释,用来进行多行注释;
3.#include语句
#include
语句是预处理指令。在C++中,使用一个预处理器,该程序在进行主编译之前,对源文件中名称以#
开头编译指令进行处理,且不需要任何特殊操作来调用预处理器,他在编译时自动运行。
#include <xxx>
编译指令则将导致预处理器将xxx文件中的内容添加到程序中来。因此,#include <iostream>
表示在编译时,引入iostram文件中的内容。
4.头文件
通过#include
包含的文件叫做头文件,C++中自带了许多头文件。在C语言中,头文件一般以.h
开头,但在C++中则有所差异,具体表现为:
- 1.C++中的头文件没有扩展名,但C++中依旧可以使用
.h
的头文件; - 2.有些C的头文件被转换成C++头文件,这些头文件被重新命名,在文件名称前加上了c,且去掉了
.h
扩展名。如C头文件math.h
被转换成了cmath
. - 3.没有
.h
的头文件可以包含名称空间。
5.名称空间 namespace
名称空间是C++的一项特性,可以避免出现同名变量、类等,从而导致编译失败,比如通过#include
引入两个头文件中都定义了一个test()
函数,当使用这个函数时,编译器将不知道指的是哪个版本,从而编译失败。因此可以将test()
函数定义在分别不同的名称空间中,使用时通过作用域符号指定,如:
namespace_a::test();
namespace_b::test();
可以通过using namespace
编译指令引入名称空间,如第一个程序中:
//引入std名称空间
using namespace std;
6.using 编译指令和using声明
要引入名称空间时,通过using编译指令引入,引入一个名称空间后,就可以使用该名称空间中的定义了,如第一个程序中的cout
和endl
是名称空间std中定义的对象。
通过using编译指令using namespace std
可以引入std名称空间中的所有定义,但这是一种偷懒的做法,在大型项目中可能会引入其他问题,除了这种方式外,我们可以通过using声明来引入名称空间中的单个定义,如:
using std::cout;
using std::endl;
using std::cin;
除了使用using编译指令和using声明之外,如果需要使用某一个名称空间中的变量,则只能通过::
进行,如:
std::cout << "hello world" << std::endl;
因此,第一个程序可以重新修改为以下两种形式,其最终效果都是一样的:
#include <iostream>
int main()
{
using std::cout;
using std::endl;
cout << "Hello world!" << endl;
return 0;
}
#include <iostream>
int main()
{
std::cout << "Hello world!" << std::endl;
return 0;
}
std是iostream文件中定义的一个名称空间,cout和endl是std中定义的两个对象,因此,要使用std::cout,必须引入iostream文件。
main函数
main函数是程序的入口,通常C++程序必须包含一个main函数,不过main函数有很多的格式,如:
void main()
{
}
int main(void)
{
return 0;
}
不过应尽量使用C++标准格式:
int main()
{
return 0;
}
使用cout进行输出
cout是std名称空间中定义的一个ostream对象,用来处理输出。为ostream定义的插入运算符<<
将使得数据插入到输出流当中。
使用cin进行输入
cin是std名称空间中定义的一个istream对象,用来处理输入。为istream定义的抽取运算符>>
将从输入流中抽取信息。
相比起C语言的printf()
和scanf()
函数,cout和cin都是智能对象,能够根据程序上下文知道如何显示字符、字符串、数字。
控制符endl
endl也来自于std名称空间,表示重启一行,和\n
的功能相同,不过有一个差别:endl确保程序继续运行前刷新输出。
其他概念
声明语句
声明语句通常指出了要存储的数据类型和该数据所需要的内存空间的大小。如:
int i; //表示申请一个4个字节的内存空间,用来存储int类型数据。
函数原型
函数原型是指声明函数的语句。在使用函数前,C++编译器必须要知道函数的参数类型和返回类型,因此C++中提供了函数原型语句。
函数原型之于函数就像变量声明之于变量——指出涉及的类型,如:
int random(int i)
{
return 10;
}
该函数原型则为:
int random(int);
一般函数原型都定义在头文件中。
C++代码规范
- 1.每条语句占一行;
- 2.每个函数由一对花括号开始,两个花括号各占一行;
- 3.函数中的语句针对花括号进行缩进;
- 4.函数的圆括号周围没有空白。
C++变量命名规则
- 1.只能使用字母、数字、下划线;
- 2.名称的第一个字符不能是数字;
- 3.大小写区分;
- 4.不能将关键字用做变量名;
- 5.以两个下划线或者一个下划线一个大写字母开头的名称被保留给实现使用;以一个下划线开头的名称被保留给实现,用做全局标识符;
- 6.对名称的长度没有限制,但不能太长。