C++复习之(三大特性)
1.访问特性
public:都能访问的
protect:自己能访问,派生类能访问,内外不能访问
private:只有自己能访问(值得注意的是,派生类会继承父类的private成员,但是不能访问)
以上范围不包括友元,友元都可以访问
2.继承
让一个类型对象获得另一个类型对象的属性和方法,这使得可以无需重新编写原来的类的代码对类的功能进行拓展(不用重复造轮子)
三种继承方式
2.多态
分为静态多态(函数的重载)和动态多态(派生类和虚函数)。
动态多态简单概括就是:允许将⼦类类型的指针赋值给⽗类类型的指针。
子类需重写父类中的虚函数,当传入什么类型的指针就调用那个类对应的函数。例子:
class Animal { public: virtual void speak() {cout << "动物在说话" << endl;} }; class Cat :public Animal { public: void speak() {cout << "小猫在说话" << endl;} }; class Dog :public Animal { public: void speak() {cout << "小狗在说话" << endl;} }; void DoSpeak(Animal & animal) { animal.speak(); } //当传入那种类型的指针就调用对应类型的函数
虚函数与动态多态绑定,当父类有函数想要子类定义自己版本时,就定义虚函数(关键字vritual),虚函数依赖于虚函数表工作,当父类指针指向子类时,虚函数表指针就指向子类的虚函数表,从而达到调用。
纯虚函数和抽象类:有时父类中的虚函数实现是毫无意义的,其主要目的在于调用子类重写的类容,因此可以将其定义为纯虚函数,对应的父类又叫做抽象类,抽象类不能实例化。
语法
virtual 返回值类型 函数名 (参数列表)= 0 ;
虚析构和纯虚析构:当类中有属性开辟到堆区是,需要利用虚构函数手动释放。但多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码,因此需要虚析构和纯虚析构,解决通过父类指针释放子类对象。
多继承:一个子类继承多父类。
虚继承:为了解决菱形继承问题,使用虚继承,目的在于节约空间和避免二义性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)