一、保留字 (常用的)
asm | auto | break | case | catch | char |
class | const | continue | default | delete | do |
double | else | enum | extern | float | for |
friend | goto | if | inline | int | long |
new | operator | overload | private | protected | public |
register | return | short | signed | sizeof | static |
struct | switch | this | template | throw | try |
typedef | union | unsigned | virtual | void | volatile |
while |
|
|
|
|
|
c++关键字分类:
数据类型:void,int,char,float,double,bool,w_char
类型定义:struct,union,enum,class,typedef
常量值:true,false
类型修饰符:long,short,singed,unsigned
类型限定符:const,volatile,restrict
存储说明符:auto,register,static,extern,thread_local,mutable
其它修饰符:inline,asm
循环控制:for,while,do
跳转控制:break,continue,return,goto
分支结构: if,else,switch,case,default
内存管理:new, delete
运算符:sizeof,and,and_eq,bitand,bitor,compl,not,not_eq,or,or_eq,xor,xor_eq
访问限定符:this,friend,virtual,mutable,explicit,operator
类访问修饰符:private,protected,public
模板:template,typename
命名空间:namespace,using
异常处理:throw,try,catch
具体解释参考: https://www.runoob.com/w3cnote/cpp-keyword-intro.html
二、运算符按其在表达式中所起的作用又可分为:
§ 算术运算符 + - * / %
§ 关系运算符 < <= >= == !=
§ 逻辑运算符 ! && ||
§ 位运算符 << >> ~ | ^ & (~按位求反 ^按位异或 | 按位或)
§ 自增自减运算符 ++ --
§ 赋值运算符 = 及其扩展(+= -= *= /= %= 等)
§ 条件运算符 ? :
§ 指针运算符 * 和 &
§ 逗号运算符 ,
§ 分量运算符 * ->
§ 函数调用运算符()
§ 下标运算符[]
§ 求字节运算符 sizeof
§ 强制类型转换运算符:(type)
三、常用的IO控制符:
#include<iostream.h>
void main()
{
int a = 1001;
cout << ”默认下:” << a << endl;
cout << ”十进制:” << dec << a << endl;
cout << ”八进制:” << oct << a << endl;
cout << ”十六进制:” << hex << a << endl;
}
此程序的运行结果为:
默认下:1001
十进制:1001
八进制:1751
十六进制:3e9
#include<iostream.h>
#include<iomanip.h>
void main()
{
cout<<setfill(‘*’)<<setw(5)<<1<<endl;
}
此程序的运行结果为:
****1
四、函数
内联扩展(inline expansion)简称为内联(inline),内联函数也称为内嵌函数。当在一个函数的定义或声明前加上关键字inline则就把该函数定义为内联函数,它主要是解决程序的运行效率。
函数重载又称为函数的多态性,是指同一个函数名对应着多个不同的函数。所谓“不同”是指这些函数的形参表必须互不相同,或者是形参的个数不同,或者是形参的类型不同,或者是两者都不相同,否则将无法实现函数重载。
一个函数直接或间接地调用自身,这种现象就是函数的递归调用。
利用函数的递归调用,可将一个复杂问题分解为一个相对简单且可直接求解的子问题(“递推”阶段);然后将这个子问题的结果逐层进行回代求值,最终求得原来复杂问题的解(“回归”阶段)。
五、数组和指针
由于二维数组在内存中是线性排列的,引用一维数组和引用二维数组都是引用相应存储地址的内容,因此可以计算出一个二维数组元素在对应一维数组中的顺序号,从而将对二维数组元素的引用转变为对一维数组元素的引用,这个过程称为“降维处理”(经常在向函数传递数组时用到)
关键字const放在不同的位置表示的意义也不相同:
关键字const放在指针类型前,就是声明一个指向常量的指针。此时,在程序中不能通过指针来改变它所指向的值,但是指针本身的值可以改变,即指针可以指向其他数据。
关键字const放在“*”号和指针名之间,就是声明一个指针常量(也称常指针)。因此,指针本身的值不可改变,也即它不能再指向其他数据,但它所指向的数据的值可以改变。
关键字const在上述两个地方都加,则是声明一个指向常量的指针常量,指针本身的值不可改变,它所指向的数据的值也不能通过指针改变。
C++提供了许多字符串处理的库函数。常用的有:
strcat()
char *strcat(char *s1,char *s2)
字符串连接函数,将字符串s2连接到字符串s1的后面,并返回s1的地址值。
strcmp()
int strcmp(const char *s1,const char *s2,[int n])
字符串比较函数,比较两个字符串s1和s2的大小(如果有参数n,比较前n个字符的大小)。当字符串s1大于、等于或小于字符串s2时,函数返回值分别是正数、零和负数。
strcpy()
char *strcpy(char *s1,const char *s2)
strlen()
int strlen(const char *s)
六、结构体和共用体
与数组的初始化特性相同,结构体的初始化仅限于外部的和static型结构体。也就是说,在函数内部对结构体进行初始化时,必须指定该结构体为static型。对缺省存储类型的auto型结构体不能在函数内部对它们进行初始化。
结构体数组初始化的一般形式是:
struct 结构体名
{
成员表列;
};
struct 结构体名 数组名[元素个数]={初始数据表};
或者:
struct 结构体名
{
成员表列;
}数组名[元素个数]={初始数据表};
结构体可以按值传递,这种情况下整个结构值都将被复制到形参中去。
结构体也可以引用传递,这种情况下仅仅把结构体变量地址传递给形参。引用传递效率较高,因为它不用传递整个结构体变量的值,节省了传递的时间和空间。
union gy
{
int i;
char c;
float f;
};
就定义了一个共用体类型union gy,它由三个成员组成,这三个成员在内存中使用共同的存储空间。由于共用体中各成员的数据长度往往不同,所以共用体变量在存储时总是按其成员中数据长度最大的成员占用内存空间。如上述共用体类型union gy的变量占用4个字节的内存。
7、类和对象
“封装性”(encapsulation)
“继承性”(inheritance)
“多态性”(polymorphism)
公有的成员可以被程序中的任何代码访问;
私有的成员只能被类本身的成员函数及友元类的成员函数访问,其他类的成员函数,包括其派生类的成员函数都不能访问它们;
保护的成员与私有成员类似,只是除了类本身的成员函数和说明为友元类的成员函数可以访问保护成员外,该类的派生类的成员也可以访问
使用构造函数的限制:不能被继承,不能说明为虚函数,不能显式调用,不能取构造函数的地址
说明复数类 Complex:
class Complex
{ int Rem ; int Imp ;
public:
Complex ( int ) { Rem = a ; Imp = 0 ; }
Complex ( int a , int b ) { Rem = a ; Imp = b ; }
...
} ;
对象可以作参数传递到函数:传值方式和传地址方式
C++程序的内存格局通常分为四个区:
全局数据区(data area) 存放全局变量、静态数据、常量。
代码区(code area) 存放类成员函数、其他函数代码。
栈区(stack area) 存放局部变量、函数参数、返回数据、返回地址。
堆区 (heap area) 。 自由存储区。
当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个函数成员所在的对象的指针。成员函数中可以用this关键字来引用该指针。this指针的类型就是成员函数所属的类的类型。当调用成员函数时,它被初始化为被调用函数所在的类实例的地址。
注意:this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象。this指针一般用于返回当前对象自身。this指针大量用于运算符重载成员函数设计中。静态成员函数没有this指针。因为类只有一个静态成员函数实例,所以使用this指针没有什么意义。在静态成员函数中使用this指针会引起编译错误。
常对象是指对象常量,定义格式如下:
<类名> const <对象名>;
或者
const <类名> <对象名>;
在定义常对象时必须进行初始化,而且不能被更新。只有常成员函数才能操作常对象,没有使用const关键词说明的成员函数不能用来操作常对象。
常成员函数
使用const关键词说明的函数为常成员函数,常成员函数说明格式如下:
<类型> <函数名>(<参数表>) const;
对于常对象成员需要注意以下几点:
const是函数类型的一个组成部分,因此在实现部分也要带const关键词。
常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。
const关键词可以参与区分重载函数。例如,如果在类中有说明:
void print();
void print() const;
则这是对print的有效重载。
inline 函数
常数据成员 就像一般数据一样,类的成员数据也可以是常量和常引用,使用const说明的数据成员为常数据成员。如果在一个类中说明了常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化。
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收
获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。