c++的学习路线:
c++同c的不同:(三大性质、库)
抽象性、封装性、继承性、多态性;标准模板库、面向对象编程… …
C++的I/O是以字节流的形式实现的,流(stream)实际上就是一个字节序列。
命名空间: — 命名空间的使用
-
命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。
-
命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。
new/delete 与 malloc/free比较
new/delete是c++语言的运算符 | malloc/free是c++语言的标准库函数不是运算符,不在编译器控制权限之内 |
---|---|
new运算符根据对象的类型自动决定其大小 | malloc要使用sizeof运算符指定分配的大小 |
new返回指向此类型的指针 | malloc返回指向void*类型的指针,要类型强制转换 |
int *p = new int; delete p; | int *p = (int *)malloc(sizeof(int) * 4) |
int *p = new int [5]; delete []p; |
两者申请和释放要配对出现、free和delete释放内存后,没有把指针设置成NULL会导致“野指针”
引用
- 定义引用时必须初始化;可以将一个引用赋予给某个变量;
- C语言中没有引用,C++中才有引用,引用一般用作函数的参数或者函数的返回值;提高使用效率,引用不占存储单元。
- 使用引用作为传递函数的参数,在内存中并没有产生实参的副本,他是直接对实参操作。
- 如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
- 如果既要利用引用调高使用效率,又要保护传递给函数的数据不在函数中被改变,就应当使用常引用。
- 如果函数的返回值是一个对象,有些场合用“引用传递”替换“值传递”可以提高效率,有些场合不可以。
常引用:保护传递给函数的数据不在函数中被改变
非const引用只能绑定到该引用同类型的变量。 int &p = 20; x 错--类型不匹配
const引用可以绑定到不同但相关类型的对象,或者绑定右值。const int &p = 20; 对
类型不同—>保存副本,占用空间,再次修改其值时,const int &p的值不变
类型相同—>不占用空间
不允许返回局部变量的地址—不允许返回的引用对应于一个局部变量(局部变量在栈中)
函数
函数的四部分:返回类型、函数名、参数表、函数体
基础函数:内联函数、函数重载、模板函数、友元函数
成员函数:构造/析构函数、常成员函数、静态成员函数
内联函数inline:解决运行效率问题(编译时)
- 适用于函数体不大、但被频繁调用的函数的函数调用
- 内联函数不能有复杂的控制语句
- 递归函数不能是内联函数,类中的函数都是内联函数
- 内联函数有与带参数的宏定义相同的作用和相似的肌理,但他消除了宏定义的不安全性
重载:(多态性)
同一作用域内,函数名相同,参数的个数或类型不同
带默认参数值的函数:
形参的默认值必须在声明中指定;默认值的定义应该从右到左;
注:形参的默认值不能为局部变量