编译运行:g++编译-f指定名称,./文件名,运行
注释:/*~*/注释, /* * */多行注释中间行行首加*, //后全注释
数据类型:基本数据类型,int(整型)、bool(布尔型)、char(字符型)、float(浮点型)、double(双浮点型)、void(无类 型)、wchar_t(宽字符型)。
其他数据类型:占用内存大小(sizeof),存储范围
typedef:typedef type newname为已有类型定义新名字
enum枚举类型:enum 枚举名{标识符,标识符} 枚举变量;例:enum color{ red, yellow } c;
变量声明和定义:
声明:type name 定义:type name = 1; 声明即告诉电脑有这么个东西,但是不知道他在哪,他的大小啊形 状啊,定义即都可知道。
extern关键字:声明一个已定义过的变量,使我在别的包、文件、代码块都可以应用他的定义量,互相之间要 引用
作用域:全局变量和局部变量,全局变量可以被自动初始化并赋予值,局部变量则不会。正确初始化变量是良好的习惯。
常量:
整数常量,可以是二、八、十、十六进制。U无符号型(unsigned),L长整数(long)
浮点常量,两种表示方法:3.1415或31415E-4。U无符号型(unsigned),f单精度32位(float),d双精度64位(double),l 高双精度(long double)80位
布尔常量:true false,不只是代表1和0
字符常量:单引号,以L开头,为宽常量字符,L'x',必须存在wchar_t类型变量中。记常用转义字符。
字符串常量:双引号,包括普通字符、转义序列、通用字符
定义常量:#define预处理器定义宏常量,count前缀声明指定类型常量,后者优点较多。
运算符:
算数运算符:+ - * / %取余 ++自增 --自减
关系运算符:== != < > <= >=
逻辑运算符: && || !
位运算符:逐位执行操作,0110&&1001 = 0000
赋值运算符:= += -= %= *= /= >>= <<= &= ^= |= c +=2 为 c = c + 2 ,皆为类似操作
杂项运算符:sizeof返回变量大小;条件运算符condition ?X:Y:condition为真执行X,否则Y;逗号运算符,:顺序执行一系列操作,逗号表达式的值是以逗号分隔开列表中的最后一个表达式的值;成员运算符.和->用于引用类、结构、共用体的成员;强制转换运算符Cast:强制转换数据类型,int(2.0002)=2;指针运算符&:返回变量地址,&a返回a的实际地址;指针运算符*:*a,将指针指向变量var
运算符优先级:算数>关系>逻辑>赋值
循环:
循环类型:while、for、do ...while
循环控制语句:break结束loop或switch、continue跳过主体剩余部分重新开始测试、goto不建议使用
判断:
语句if else if else、switch;a?b:c条件运算符
函数:return_type function_name( parameter list ) { body of the function };也可以先声明后定义;
参数:形式参数和实际参数,三种调用方法:传值调用:只改变函数里的值、指针调用:实际参数地址复制给形式参数,改变原实际参数的值;引用调用:将实际参数的引用复制给实际函数,改变实际参数的值。
参数默认值:当设置了参数默认值,调用时未传参数使用默认,反之实参
lambda函数与表达式:把函数看作对象。
[capture](parameters)->return-type{body [] // 沒有定义任何变量。使用未定义变量会引发错误。 [x, &y] // x以传值方式传入(默认),y以引用方式传入。 [&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。 [=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。 [&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。 [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
[=]或[&]可以直接使用this指针,[]不能直接使用,需要显示的传入
[this]() { this->someFunc(); }();
数字运算:有丰富的内置函数库,<cmath>;生成随机数:srand()设置种子,rand()生成随机数
数组:type arrayName [ arraySize ];赋值进行初始化;arrayName[0]
多维数组:二维三维,int[3][4]三行四列
数组地址:double balance[50];*p值,p地址&balance[0]等同于balance
可传递数数组给函数,函数不能直接返回数组,可定义指针函数返回指针,再指针递增得到值
字符串:
序号 | 函数 & 目的 |
---|---|
1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 |
3 | strlen(s1); 返回字符串 s1 的长度。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。 |
5 | strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
C++中还提供了string类类型
指针:
针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
指针变量:*p,p为地址
空指针:为空指针赋值NULL,则地址为0,指向不可访问位置;若指针为空,则表示指针不指向任何东西。原函数中NULL的定义即为0.
指针的算术运算:递增递减,不是数值的变化,是位置的移动,地址大小上移动四个字节
指针和数组大多数情况下是可以互换的。但是数组名是指向首位地址的常量,不要试图改变他
指针数组:将指针存在数组中,这样可以方便调用,并且在同一数组中存储多种类型。也可以用其存储一个字符串列表。
指向指针的指针:多级间接寻址,指针链,用两个**在前,都是相同地址,可以理解为地址值的传递而已
传递指针给函数:可以当做函数的参数,参数也可以接受数组
函数返回指针:必须加*声明一个返回指针的函数,如存储数组之后可以直接返回数组首位置,很方便。
引用:
指针和引用的区别:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
变量名是是变量的第一标签,可以想象为是变量的第二标签。
把引用作为参数:实现引用调用函数。
把引用作为返回值:类似指针函数,返回一个引用,并返回一个指向引用的隐式指针,函数就可以直接放在等式左边进行赋值,优点是在内存中不产生返回值的副本。
遵守规则:
- (1)不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
- (2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
- (3)可以返回类成员的引用,但最好是const。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常 量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。
日期和时间:需使用C的<ctime>头文件。
有四种相关类型:
类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。
结构类型 tm 把日期和时间以 C 结构的形式保存,tm结构:int tm_sec类似。
关于时间的重要函数
// 基于当前系统的当前日期/时间 time_t now = time(0); // 把 now 转换为字符串形式 char* dt = ctime(&now); // 把 now 转换为 tm 结构 tm *gmtm = gmtime(&now);(GMT时间)tm *ltm = localtime(&now);(本地时间);C中使用ltm->tm_year访问结构成员。
基本的输入与输出:
<iostream> | 该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。 |
<iomanip> | 该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。 |
<fstream> |
该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。 |
输入输出流可以使用函数来改变输出的方式。非常多。setiosflags、cout.self
数据结构:结构是用户自定义的数据类型,允许存储不同类型的数据量。
定义结构:使用struct定义
struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;结构体名称、数据、变量名。
使用.访问。结构可作为函数参数与指针类似。
指向结构的指针:struct Books *struct_pointer;
函数可以返回结构体:
struct test set( int a, float b, char c, double d )
{ struct test t; t.i = a; t.f = b; t.c = c; t.d = d; return t; }