个人总结的一些C++基础理论 (2)

后置递增:void operator(int) int代表占位参数,可以用于区分前置和后置递增类和对象-C++运算符重载-赋值运算符重载默认情况下,C++编译器至少给一个类添加三个函数

默认构造函数(无参,函数体为空);

默认析构函数(无参,函数体为空);

默认拷贝构造函数,对属性进行值拷贝;

赋值运算符 operator=,对属性进行值拷贝;总结:如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题类和对象-C++运算符重载-关系运算符重载作用:重载关系运算符,可以让两个自定义数据类型对象进行对比操作类和对象-C++运算符重载-函数调用运算符重载

函数调用运算符()也可以重载

由于重载后使用的方式非常像函数的调用,因此被称为仿函数

仿函数莫有固定写法,非常灵活//重载关系运算符 bool operator==(Person &p) { if (this->m_Name == p.m_Name&&this->m_Age == p.m_Age) { return true; } return false; }类和对象-继承-基本语法优点:减少重复代码类和对象-继承-继承方式语法:class 子类 :继承方式 父类继承的方式有三种:

公共继承

保护继承

私有继承

公共继承:父类的公共权限,在子类依然是公共权限 父类的保护权限,在子类依然是保护权限 父类的私有成员 子类访问不到保护继承:父类的公共权限,在子类变为保护权限父类的保护权限,在子类依然是保护权限父类的私有成员 子类访问不到私有继承:父类的公共权限,在子类变为私有权限父类的保护权限,在子类变为私有权限父类的私有成员 子类访问不到 类和对象-继承-继承中的对象模型

父类中所有非静态成员都会被子类继承下去

父类中的成员属性 是被编译器给隐藏了,因此是访问不到,但确实是被继承下去了类和对象-继承-构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数

继承中的构造和虚构顺序如下:先构造父类,再构造子类,析构的顺序与构造的顺序相反类和对象-继承-同名成员处理问题:当子类与父类出现同名成员,如何通过子类对象,访问到子类或父类中同名的数据呢?

访问子类同名成员 直接访问即可

访问父类同名成员 需要加作用域

当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数类和对象-继承-同名静态成员处理问题:继承中同名的静态成员在子类对象上如何进行访问?

通过对象访问

通过类名访问静态成员和非静态成员出现同名,处理方式一致

访问子类同名成员 直接访问即可

访问父类同名成员 需要加作用域

当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数类和对象-继承-继承语法

C++允许一个类继承多个类

多继承可能会引发父类中有同名成员出现,需要加作用域区分

不建议使用多继承类和对象-继承-菱形继承问题以及解决方法菱形继承概念:

两个派生类继承同一个基类

又有某个类同时继承两个派生类

这种继承称为菱形继承或者钻石继承类和对象-多态-多态的基本语法多态分为两类:

静态多态 函数重载和运算符重载属于静态多态,复用函数名

动态多态 派生类和虚函数实现运行多态静态多态和动态多态的区别:

静态多态的函数地址早绑定 编译阶段确定函数地址

动态多态的函数地址晚绑定 运行阶段确定函数地址Speak就是虚函数函数前面加上virtual关键字,变成虚函数,那么编译器在编译时就不能确定函数调用了类和对象-多态-多态的原理剖析多态满足条件: 有继承关系 子类重写父类中的虚函数多态使用条件: 父类指针或引用指向子类对象重写:函数返回值类型 函数名 参数列表 完全一致称为重写类和对象-多态-纯虚函数和抽象类

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容

可以将虚函数改为纯虚函数

纯虚函数语法:virtual 返回值类型 函数名 (参数列表) = 0;

当类中有了纯虚函数,这个类也被称为抽象类;

抽象类特点:a. 无法实例化对象b. 子类必须重写抽象类中的纯虚函数,否则也属于抽象类类和对象-多态-虚析构和纯虚析构

多态使用时,如果子类有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

解决方式:将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性a. 可以解决父类指针释放子类对象b. 都需要有具体的函数实现

虚析构和纯虚析构共性如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法:Virtual ~类名(){}

纯虚析构语法:Virtual ~类名()= 0;类名::类名(){}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjpfp.html