-
引用
格式:数据类型 &别名 = 原名
引用必须初始化,初始化后不能改变
-
函数
默认参数:
语法:返回值类型 函数名 ( 参数 = 默认值 ) {}
1.如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
2.如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
3.如果函数声明有默认参数,函数实现就不能有默认参数,反之,亦然。
重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
同一个作用域下 函数名称相同 函数参数类型不同或者个数不同或者顺序不同
注意:
函数的返回值不可以作为函数重载的条件
引用可以作为函数重载的条件
-
类和对象
三种访问权限:
公共权限 public
保护权限 protected
私有权限 private
在C++中struct和class唯—的区别就在于默认的访问权限不同,struct默认权限为公共. class默认权限为私有
析构函数和构造函数
构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,而且只调用一次。
注意: 没有返回值不用写void 函数名与类名相同,构造函数可以有参数,可以发生重载
两种分类方式:
按参数分为: 有参构造 和 无参构造
调用默认构造函数时候,不要加()
按类型分为:普通构造和拷贝构造
构造函数调用规则如下:
·如果用户定义有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造
·如果用户定义拷贝构造函数,C++不会再提供其他构造函数
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
注意:没有返回值不写void 函数名和类名相同在名称前加~ 析构函数不可以有参数的,不可以发生重载 对象在销毁前会自动调用析构函数,而且只会调用一次
成员变量 和 成员函数是分开存储的。.
this 指针
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。
this指针指向被调用的成员函数所属的对象。
this指针的用途:
当形参和成员变量同名时,可用this指针来区分
在类的非静态成员函数中返回对象本身,可使用return *this,此时函数是引用的方式。
C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针
常函数:
·成员函数后加const后我们称为这个函数为常函数·常函数内不可以修改成员属性
·成员属性声明时加关键字mutable后,在常函数中依然可以修改
常对象:
声明对象前加const称该对象为常对象
常对象只能调用常函数
友元
友元的目的就是让—个函数或者类访问另一个类中私有成员
友元的关键字为friend
友元的三种实现
- 全局函数做友元
- 类做友元
-
成员函数做友元
运算符重载
- 成员函数重载+号
- 全局/友元函数重载+号
继承
减少重复代码
继承方式一共有三种:·公共继承/保护继承/私有继承
父类中所有非静态成员属性都会被子类继承下去
父类中私有成员属性是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了
继承中构造和析构顺序
子类继承父类后,当创建子类对象,也会调用父类的构造函数
先构造父类,再构造子类,析构顺序与构造的顺序相反
多态
父类引用指向子类对象
多态分为两类
- 静态多态:函数重载和运算符重载属于静态多态,复用函数名。
- 动态多态:派生类和虚函数实现运行时多态
静态多态和动态多态区别:
- 静态多态的函数地址早绑定–编译阶段确定函数地址
- 动态多态的函数地址晚绑定–运行阶段确定函数地址
动态多态满足条件
1、有继承关系
2、子类重写父类的虚函数
在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数,当类中有了纯虚函数,这个类也成为抽象类。
抽象类特点:
- 无法实例化对象
- 子类必须重写抽象类中的纯虚函数,否则也属于抽象类