C++虚函数、虚继承、虚基类、多态、智能指针 | 您所在的位置:网站首页 › 指针多态 › C++虚函数、虚继承、虚基类、多态、智能指针 |
目录 虚函数 虚继承 虚基类 智能指针 多态 虚函数1,什么是虚函数 - 基类中被virtual关键字修饰的成员函数:基类希望被派生类重新定义、而不是被继承(普通继承)的函数 - 作用:实现多态。通过继承基类中的虚函数,在子类中重载实现不同操作 虚继承2,什么是虚继承(虚拟继承) - D继承自B和C,B和C都继承自A,这时可以将B和C对A的继承定义为虚继承。 - 用于解决多重继承,节省内存空间 虚继承在什么情况下使用? - 子类继承来自于同一个公共祖先的多个父类的时候。 https://www.cnblogs.com/Jace-Lee/p/5859478.html 虚基类3, 什么是虚基类 (virtual base class) - class C: virtual public A。 // 声明类 C 是类 A 的公有派生类,A 是 C 的虚基类 - 解决的问题:从不同途径继承同一基类的子类,会产生多个基类的拷贝。导致:1,浪费存储空间 2,二义性问题 为什么要有虚继承?是为了解决什么问题? - 简书 - 做法:继承间接共同基类时只保留一份成员。虚基类是在声明派生类、指定继承方式时声明 - 在最后的派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化。C++ 编译系统只执行最后的派生类对虚基类的构造函数的调用,而忽略虚基类的其他派生类(如类 B 和类 C)对虚基类的构造函数的调用,保证虚基类的数据成员不会被多次初始化。 智能指针4,什么是智能指针 1)普通指针存在的问题 - 普通指针可能引起的问题:挂起引用(一块被多个指针引用、被其中一个指针释放但其他指针不知道)、内存泄漏(从堆中申请了内存没有释放),因为 C++使用内存的时候很容易出现前面的这些野指针、悬空指针、内存泄露的问题。所以C++11引入了智能指针来管理内存。 2)智能指针的作用和原理 原理:在析构函数中,检查所引用对象的引用计数,如果引用计数为0,则真正释放该对象内存 智能指针有4种: auto_ptr:已经不用了(C++ 98的智能指针,容易出错(在函数间传递产生野指针),已被废弃)unique_ptr:独占式指针,同一时刻只能有一个指针指向同一个对象shared_ptr:共享式指针,同一时刻可以有多个指针指向同一个对象weak_ptr:用来解决shared_ptr相互引用导致的死锁问题区别详见链接 作用: - 智能指针用于动态分配内存,提供所有普通指针的接口;分配内存,当离开作用域时自动释放已分配的内存。 - C++11智能指针:shared_ptr,unique_ptr,weak_ptr C++11 智能指针 - 简书 多态5,什么是多态 1) 多态是C++三大特性之一(封装、继承、多态),多态的目的则是为了接口重用(封装的作用是使代码模块化,继承的作用是为了扩展已有的代码) 2)在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。 - 接口的多种不同实现方式。,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。 - 作用:将接口与实现分离、接口重用。用共同的方法实现因个体差异而不同的策略。 什么是多态性: 多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。 a、编译时多态性(静态多态):通过重载函数实现 b、运行时多态性(动态多态):通过虚函数实现。 |
CopyRight 2018-2019 实验室设备网 版权所有 |