从c到c++
1 从C到C++
1.1 C++基于C的增强,所有对C后向兼容(c里的功能都能用)
1.2 语法层面的增强(引用,函数重载,内联函数等新的概念)
1.3 编程思想方面的增强
面向对象的编程思想
封装,将数据和函数封装到一个新的数据类型(类)
继承,派生可以继承基类的一切数据(代码复用)
多态,一个同名函数在基类和派生类中有不同的实现(一个接口,不同的实现,实现代码功能的扩展)
泛型编程思想(模板)
函数模板
类模板
c++编译过程
2 C++的编译过程
2.1 C++源文件的后缀.cpp
2.1 编译过程和C程序完全相同:预处理,编译,汇编,连接
2.2 使用g++编译
2.3 g++ -E a.cpp //触发预处理
g++ -S a.cpp //触发预处理,编译
g++ -c a.cpp //触发预处理,编译,汇编
g++ a.cpp //触发预处理,编译,汇编,连接
强制类型转换
3 强制类型转换
C:
a = (int)b;
C++:
static_cast<int>(aa)
dynamic_cast<Student *>(stu)
const_cast<Student *>(stu)
reinterpret_cast<Student *>(stu)
引用
4 引用
引用:给一个已有的变量取别名
int a = 100;
int& ref_a = a;
3.1 引用一定要初始化
3.2 引用初始化后不能再指向其他的变量
3.3 不能返回函数中局部变量的引用,因为当函数执行完,这个局部变量的栈内存会被系统回收,导致段错误,系统崩溃
内联函数
5 内联函数
inline int add(int, int)
5.1 提高程序的执行速率,不使用普通的函数调用的流程,再编译的时候直接用代码替换
5.2 inline函数的代码行数一般< 5; 不能有复杂的switch/while控制语句;不能有递归;不能调用其他的普通函数
5.3 inline函数在某种程度上是为了替换宏
函数重载
6 函数重载(overload)
int add(int a, int b);
int add(int a, int b, int c);
int add(int *p, int len);
6.1 函数重载,函数名字相同,参数类型不同,参数的个数不同,参数的个数不同(作用域一定相同)
6.2 仅仅靠返回值不同进行重载是不允许的
默认参数值
7 默认参数值
定义函数时可以给形参指定一个默认的值
7.1 语法格式:
void func1(int a, double b, char c='#');
...
func1(1, 3.14) //相当与调用func1(1, 3.14, '#')
7.2 默认参数的使用原则:
默认参数一定放在非默认参数的后面(可以所有的参数都是默认参数)
一旦出现了第一个默认参数,那他后面的参数一定都是默认参数
作用域
8 作用域
8.1 局部域
8.2 名字空间域
8.3 类域
8.4 变量的作用域
局部变量的作用域是局部,
普通全局变量的作用域是整个项目(别的文件可以访问);
静态全局变量的作用域是本文件,在别的文件是不可见的
8.5 全局函数的作用域
普通全局函数的作用域是整个项目(别的文件可以访问);
静态全局函数的作用域是本文件,在别的文件是不可见的