C++速通笔记 二 (进阶)

  • 引用

格式:数据类型 &别名 = 原名

引用必须初始化,初始化后不能改变

  • 函数

默认参数:

语法:返回值类型 函数名 ( 参数 = 默认值 ) {}

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、子类重写父类的虚函数

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数,当类中有了纯虚函数,这个类也成为抽象类。

抽象类特点:

  • 无法实例化对象
  • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类
     


 






 

猜你喜欢

转载自blog.csdn.net/m0_48385518/article/details/126838112