C++历史
“C with Class”阶段,C语言基础上的特征主要有:类及派生类、共有和私有成员、构造函数和析构函数、友元、内联函数、赋值运算符的重载,等等。
1985年1.0版新增加:虚函数的概念、函数和运算符的重载、引用、常量,等等。
1989年2.0版新增加:类的保护成员、多重继承、对象的初始化与赋值的递归机制、抽象类、静态成员函数、const成员函数,等等。
1993年3.0版新增加:模板(template),解决了多重继承产生的二义性及其构造/析构函数的处理问题,等等。
1998年C++语言及库标准化:名字空间、标准模板库(STL)、通用算法类和字符串类型,等等。该标准通常简称ANSI C++或ISO C++ 98标准,此后每5年更新一次标准。
2003年通过了C++标准第二版(ISO/IEC 14882:2003)C++03:这个新版本是一次技术性修订,对第一版进行了整理—修订错误、减少多义性等,但没有改变语言特性。
国际标准化组织于2011年9月1日出版发布《ISO/IEC 14882:2011》简称ISO C++ 11标准,取代现行的C++标准、C++98和C++03。
C++里的特性及专业术语
1、类class | 描述现实的事物(特征&行为),实质都是抽象的,不存在的。如身高、年龄、吃饭、走路 |
2、对象 | 对象就是类的实例化,对象是实实在在存在于现实世界,但是抽象的,特指的概念 |
3、继承 | 一个类获得另外一个或多个类共享的特征&行为,例如:儿子有父亲的一些特征 |
4、多态 | 多种形态,一种接口多种方法。如你(8岁) 父亲 买票行为--你买票(半票)--父亲(全票) |
5、封装 | c语言里函数就是封装的概念,将数据和数据的操作封装在一起 |
6、组合 | 一个类中包含了另一个类的对象 |
7、静态绑定 | 一个数据的表达式的类型在编译的时候就已经确定了 |
8、动态绑定 | 一个数据的表达式的类型在运行的时候才确定,如多态 |
9、特征&属性 | 在C++特征&属性就是代表变量 |
10、行为&方法 | 在C++行为&方法就是代表函数 |
C++的程序的编译
1、预处理(就是将多个文件进行关联,并处理那些替换转换#define num 100)
2、编译(检查代码是否符合C++规范,并且将源码翻译成汇编语言)
3、汇编(将汇编语言翻译成机器语言(二进制))
4、链接(生产可执行文件)
C与C++的编程区别
C语言 :面向过程
将现实世界中的问题的解决步骤流程按照函数一步一步的进行实现
C++ :面向对象
一切皆对象,将现实世界中的事物抽象成对象,用对象去处理相应的实际的问题
总结:在维护方面,C++更能精确查找问题
引用
作用:给变量取别名,别名与变量都指向同一空间 语法:数据类型 &别名 = 原名
int a = 10; int &aa = a;
引用的本质
在C++内部实现是一个指针常量(直接可以当指针常量来进行使用)
引用的注意事项
1、引用必须初始化 既 int &aa = a; ,不能 int &aa;
2、引用初始化过后,不可以改变
引用作为函数参数的使用
函数传递参数时可以让形参修饰实参(优点:简化指针)
void myswep01(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void myswep02(int &a, int &b)
{
int temp =a;
a = b;
b =temp;
}
可以发现,做参数引用时,他就和指针效果是一样的。引用它修改的就是实参的值。相当于传递地址过去
引用做函数返回值
1、不要返回局部变量的引用
int& test01()
{
int a = 10;//这是一个局部的变量,应该在该函数结束的时候就没有了
return a;
}
当主函数main调用时,第一次可能值还在,第二次值就是乱码了。
2、函数的调用可以作为左值
int& test02()
{
static int a = 10; //该常量存在于全局区,只有程序结束才会消灭
return a;
}
int main()
{
int &ref = test02();
cout << "ref=" << ref << endl;
test02() = 20;//可以作为左边赋值
cout << "ref=" << ref << endl;
}
执行会发现结果会发生改变,开始ref=10,第二次ref=20。
函数提高
函数默认参数
在C++中,函数的形参列表中的参数是可以默认值的(初始值)
语法:返回值类型 函数名(参数=默认值){}
int func(int a,int b=10, int c=20)
{
return a+b+c;
}
int main()
{
cout << func(10,20<<endl;
return 0;
}
执行结果为50. 既没有传输参数则使用默认参数。
注意事项:
1、当默认参数开始有默认值时,则默认值后面的参数必须都有参数。
2、函数声明和函数实现只能有一个有默认参数(两个都有则无法进行正常使用)。
函数占位参数
在C++中函数的形参列表里是可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名(数据类型){}
void func(int a, int)//后面的到时候传一个相同类型的参数进来
{
cout << this is func << endl;
}
占位参数同样可以进行默认值。
函数重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
1、 同一个作用域下
2、函数名称相同
3、函数参数类型不同或者个数不同或者顺序不同
注意:
1、函数的返回值不可以作为函数重载的条件 返回值类型(void、int)
2、引用可以作为重载的条件
3、函数重载碰到默认参数(执行错误)
void func() //原函数
{
cout << func is << endl;
}
void func(int a) //参数不同
{
cout << func is << endl;
}
void func(float a) //类型不同
{
cout << func is << endl;
}
void func(float a, int a) //顺序不同、个数不同
{
cout << func is << endl;
}
void func(int a, float a)
{
cout << func is << endl;
}