一、C++ 关键字
主要是新增的:
asm:用于在C、C++程序中嵌入汇编程序
bool wchar_t是C++新增的基本数据类型(10个基本类型)
try{}catch(异常类型){} 被动捕获异常
class 声明类,在模板中说明类型
const:常引用,常对象,常函数
const_cast(常类型转换),reinterpret_cast(重定义类型转换),static_cast(静态类型转换),dynamic_cast(动态类型转换):标准类型转换
new,delete,new[],delete[]:用于C++申请和释放堆内存,相当于malloc(),free()
enum:C中的枚举类型要求不严格,C++中对枚举类型要求严格:只能用枚举常量值为枚举型变量赋值,不能用其它类型
explicit: 用于修饰构造函数,禁止隐式类型转换
true,false:C++中bool型变量的值常量
friend:C++中说明友元函数,友元类时使用
inline:C++中新增的函数特性:内联函数
mutable:C++类中声明的活跃数据成员
namespace:用于声明或使用命令空间
operator:C++操作符重载
public(公有),protected(保护),private(私有):C++新增的数据访问权限类型和 继承类型
struct C++中不是说明结构体,则是用struct声明的类
template:模板,用于说明模板函数和模板类
this:C++中内置一个永远指定本类对象的指针,只能在类内使用,不能在类外使用
throw:C++中主动抛出异常
typeid:用于获取类型标识id gnuC:typeof(num);获取某变量的类型int num; typeof(num) num2;
typename:用于模板中说明类型
using:C++中新增使用命名空间声明
virtual(虚,虚函数):C++中核心关键字,动态联编,抽象类
二、命名空间
1.命名空间的作用:为了防止命名冲突;
2.命名空间声明:
namespace 命名空间名 {
空间成员;
}
3.命名空间的使用方法:
1) 全路径:命名空间名::成员员;
2) 使用using语句: using 命名空间::成员名; 只能使用指定的一个成员
3) 使用: using namespace 命令空间名; 在此命名空间的所有成员都可直接使用
三、标准输入输出类型
1.C++中的标准输入,输出等
类型 C标准IO库 系统IO库
extern istream cin; 标准输入(键盘) stdin(FILE *) STDIN_FILENO(int) extern ostream cout; 标准输出(显示屏) stdout(FILE *) STDOUT_FILENO(int) extern ostream cerr; 标准错误(显示屏) stderr(FILE *) STDERR_FILENO(int) extern ostream clog; 标准日志
2.使用C++标准输出cout对象,不需要格式化字符,原因是重载了不同类型的<<操作符
ostream & operator << (ostream & out,int num);
ostream & operator << (ostream & out,float num);
ostream & operator << (ostream & out,const char *s);
ostream & operator << (ostream & out,const string &s);
1.C++标准输入:cin
2.重载了不同的>>
istream & operator >> (istream &in, int &num);
istream & operator >> (istream &in, float &fnum);
istream & operator >> (istream &in, char *&str);
istream & operator >> (istream &in, string &s);
istream & operator >> (istream &in, Student &s); //没有定义,所以不能直接输入Student
3.C标准IO中的scanf(),printf()带缓冲区; cin,cout也带缓冲区
四、C++ 新增运算符
1. ::域作用符 命名空间::成员; 类名::成员
2. typeid 获取某变量的类型标识 跟C中的typeof(变量名)类似gnuC int a; typeof(a) b;
3. new和delete,new[]和delete[] 申请堆内存,与C中的malloc()、free()
1) new用于创建对象指针,delete用于释放对象指针指向的堆内存
2) new[]用于创建对象数组,delete[]用于释放对象数组的堆内存
4. .* ->*用于通过指向类中的成员指针访问成员
5. throw用于主动抛出异常
6. typeof()返回变量的类型 typeid返回typeinfo对象
7. new、delete与malloc(),free()的区别:
1) new,delete是操作符,malloc(),free()是函数;
2) new会自动调用构造函数,delete会自动调用析构函数,而malloc()和free()不会自动调用
五、数组相关
1.静态数组:int arr[5];数组占用内存大小在编译时就确定;
2.动态数组:C: int *p = malloc(5 * sizeof(int)); C++: int *parr = new int[5];
3.柔性数组:定义
struct craarray
{
int count; //必须有其它成员;
int array[0]; //柔性数组的最后一个成员必须为数组,
}
六、引用相关
1.引用的声明: 类型 &引用名 = 初始化值; int &ref = num; 此&作类型说明符,说明ref是引用,类型为 int &;
2.引用的使用与变量的使用方式相同,(引用就是变量的别名);
3.引用的特性:
1)引用声明时必须初始化
2)引用的绑定关系不可更改(终身制)。
3)访问引用的值实际访问的是引用所引用变量的值
4)对引用取地址实际是对引用所引用的变量取地址(C++没有提供获取引用自身地址的方式),
4.引用的类型与所引用变量的类型要一致;
5. 引用与指针的区别:
1) 声明时指针可初始化可不初始化,引用必须初始化
2) 指针的指向关系随时可变,引用的绑定关系永远不变
3) 引用不占用内存空间,指针需要占用4/8字节,取决于系统
4) 有void指针,没有void引用,有指针引用,没有引用指针
6.引用的本质:是指针常量 1) 指针常量声明时必须初始化 2)不能修改指针常量的指向
7.区别在于编译器碰引用访问值时会自动加*
8.引用的作用:主要用于作参数;
1) 一般类型作参数: 优点:声明、实现、调用都简单, 缺点: 不能修改实参的值。占用更多内存,执行效率低。
2) 指针作参数:优点:能修改实参的值,节省内存,执行效率高,缺点: 声明、实现、调用稍复杂,
3) 引用作参数:优点:能修改实参的值,节省内存,执行效率高,实现和调用简单,缺点:声明稍复杂;
七、内联函数相关
C++新增函数特性:
1.一般函数的优点:会参数类型检查更安全, 缺点:执行效率低,创建函数栈(函数内的局部变量,形参调用时,返回值),销毁栈;
2.带参宏的优点: 优点:执行效率高,不会创建和销毁函数栈, 缺点: 没有参数类型检查,不安全
3.内联函数: 优点:参数有类型检查,更安全,在调用时不会当作函数,而是将函数体中的内容替换掉调用处,不需要创建和销毁函数栈,效率也高
4.内联函数的限制:不能超出限制,否则当作一般函数执行
1) 内联函数不能超过5行;
2) 不能有循环和swich语句;
3) 不能主动抛出异常throw;
4) 递归函数不能是内联函数;
八、函数重载相关
C++新增函数特性:
1.C语言中不允许在同一作用范围中函数名相同;
2.(overload)函数重载: 1)在同一范围中(在同一文件中或同一类中) 2)允许函数名相同 3)但参数不同(参数的类型不同,参数的个数)
3.重载时所调用的函数由实参(实参类型或实参个数)决定,如果参数类型不一致会隐式类型转换为形参类型,但如果不能自动转则编译出错
4.函数重载时要注意:
1) 返回值不能作为区分重载的依据
2) 防止可能造成二义性错误的情况
九、缺省函数相关
C++新增函数特性:
1.函数缺省值: 形参名右边 = 默认值;(常使用缺省值尽量设置到右边,常设置的数据尽量设置到左边)
2.好处:1) 调用方便
3.函数缺省值注意: 1) 定义含有缺省值的函数时必须按从右向左的顺序(右边有缺省值,则左边才能有); 2) 调用含有缺省值的函数时必须按从右向左的顺序(右边设置了缺省值,则左边才能设置缺省值) 3) 定义和调用含有缺省值的函数时要防止二义性错误
10、类相关
1.this是关键字:在C++中表示指向本类对象的指针,内部定义;
2.struct声明的类与class声明的类的区别: 1) class声明的类默认访问权限是private私有的,struct声明的类默认访问权限是public公有的
3.面向对象编程:三大特征:封装,继承,多态;
4.定义类: class 类名{
访问权限:
数据成员类型1 数据成员1;
...
成员函数1;
...
};
5.定义类时不占内存,而在创建对象时分配内存
6.把事物的属性封装成类的数据成员,把事物动作封装成类的成员函数;
11、对象及内存分配
1. 对象的创建及初始化:声明类时不占内存,创建对象时才分配内存
1)一般对象: 类类型 对象名;
2)对象指针:a.在栈中的对象指针: 类类型 *对象指针名; b.在堆中的对象指针:类类型 *对象指针名 = new 类类型;
3)对象数组:a.在栈中的对象数组: 类类型 数组名[成员个数]; b.在堆中的对象数组: 类类型 *数组名 = new 类类型[成员个数];
4)对象引用: 类类型 &对象引用 = 对象名;
2.对象访问数据成员或成员函数的格式:
1) 一般对象名.成员;
2) 对象指针->成员;
必须先创建对象,再通过对象访问成员
3.应用程序加载到内存时,分区:
.text 程序上下文,存放编译后二进制指令集,只读不写
.data 已初始化数据区,存放已初始化全局变量和静态变量,能读能写
.bss 未初始化数据区,存放未初始化的全局变量,能读能写
.rodata 常量数据区,存放程序中的常量: "hello world",只读不写