前面简介似的整理完了C语言的笔记,真是汗颜,不过这样开始也要比一直就那么放着要有意义。
这段时间就趁着所学还未完全冷却,好好回忆、整理、总结一下吧!接下来是C++的笔记...
1、从 C 到 C++
C++是在C语言的基础上,增加了面向对象程序设计的支持,是C语言的超集。与C相同的是,C++程序结构同样采用函数驱动机制,实现类的封装,数据隐藏,继承及多态。既可以进行过程化程序设计,又可进行面向对象程序设计。
面向对象程序设计三要素:对象、类和继承;
面向对象程序设计三大特征:封装性、继承性、多态性;
其中,封装性是基础,继承性是关键,多态性是补充;
2、C与C++中 const 限定符的区别
C 中 const限定符 :一个不能改变值的变量
C++中const限定符:一个带有类型描述的常量
例:
const int * pNumA; // const 在 * 左边,表示 *pNumA 为常量
int * const pNumB; // const 在 * 右边,表示 pNumB 为常量
3、const 与 define
a. const 定义的常量有类型,而define 定义的无类型
b. const 在编译时分配内存,而 define 定义的常量在预编译时进行替换
c. const 定义的常变量作用域为该变量的作用域,而 define 定义的常量的作用域为其定义点到程序结束,或用 #undef 取消
4、堆空间的申请
对比C中的malloc( )、free( ),C++中使用运算符 new 与 delete 来申请堆空间
注:delete 与delete[ ]
int *pNum = new int('ha'); // 分配一个int型的空间并初始化
int *pBuffer = new int[10]; // 分配10个int型空间
.....
delete pNum; // 释放单个对象
delete[] pBuffer; // 释放一组对象
5、函数重载与默认参数
函数重载:
在C中,若两个函数重名且参数不同,在编译时将会报错。
而C++会根据传入参数的不同而决定调用哪个函数,是一个典型的重载函数,C++中的名称粉碎机制就是为了支持这一特性而提出
默认参数:
在C++中,函数声明或定义时,可以给形参赋默认值(从右至左),调用函数时,若未给定实参,则按照指定的默认值进行工作。
6、引用
定义:变量别名
一般格式:类型 &引用名 = 变量名
示例:
int nNum;
int &nCount = nNum;
注:
a.引用只是变量别名,二者实际上是同一个变量,也就是 nNum 和 nCount 表示同一个变量,二者地址完全相同;
b.定义引用时必须要初始化,以确定引用是哪个变量的别名;
c.引用初始化后不能更改
d.const引用可以初始化为不同类型,非const引用只能初始化为相同类型
引用与指针对比:
a.引用访问一个变量属于直接访问,而指针访问一个变量属于间接访问(保存的是变量的地址);
b.引用只是变量别名,不是一个单独的变量,没有自己单独的内存空间,而指针是一个单独的变量,有自己单独的内存空间;
c.引用一经初始化不能再引用其他变量,而指针则可以通过重新赋值指向另外一个变量(非const 指针);
三种传参方式比较:
值传递:实参初始化形参要分配空间,将实参内容拷贝到形参;
指针传递:实参初始化形参要分配空间,将实参地址拷贝到形参(本质上仍是值传递);
引用传递:实参初始化形参不需分配空间;
7、类型转换
a. const_cast:常量类型转换
作用:去除被转换变量的const属性,使得常量指针被转换为非常量指针,并且仍然指向原来的对象;常量引用转换为非常量引用,并且仍然指向原来的对象;
b. static_cast:静态类型转换
作用:强制转换
c. reinterpret_cast:重定义类型转换
作用:将目标变量按其转换类型重新解释,并进行操作
d. dynamic_cast:动态类型转换
作用:在执行期决定真正的类型
8、C++的输入输出机制
I/O流是指输入输出的一系列数据流;
输出使用插入操作符“<<”向输出流中插入字符;
输入使用抽取操作符“>>”从输入流中抽取字符;
输入输出控制符在头文件 iomanip 中定义;