c++封装继承多态原理

文章探讨了C++中的封装概念,如何通过类作为函数参数来调用对象属性和方法。接着讲解了继承的意义,包括private、protected和public的访问控制。多继承的问题,如菱形继承及解决方案——虚继承,以及多态的概念和实现机制,强调了虚函数在多态中的作用。此外,提到了虚析构函数的重要性,用于确保正确销毁子类对象。最后,文章提到了函数的重载、重写和重定义的区别。
摘要由CSDN通过智能技术生成

【封装】突破c思想,用类做函数参数时调用对象的属性和方法
【继承】意义:复用前人代码
private: 1.该类中的函数、2.其友元函数访问, 不能被任何其他访问,该类的对象也不能访问。

protected:1.该类中的函数、2.子类的函数、 3.其友元函数访问, 但不能被该类的对象访问。

public: 1.该类中的函数、2.子类的函数、 3.其友元函数访问, 4.该类的对象访问。
private 属性不能够被继承。
【多继承】始终存在问题
菱形继承(由继承树变成图,灾难)
1、公共祖先(菱形上部分)解决:虚继承 class A:virtual public B,底层原理:加上virtual关键词后c++编译器会给变量增加属性,类的size会增加一个指针大小vptr
2、两个父类中有相同的属性(菱形下部分),子类无法判断是哪一个父类的属性:类作用域符显式调用

【多态】意义:前人(基类)可以用后人(未来)的代码
父类的指针和引用指向自类,Base * p = child(),当父类和子类中有重名函数,p会调用基类的函数
多态实现:在父类的同名函数前加virtual关键字,实现一种语句多种形态,即父类指针指向不同的子类时,调用对应子类的重名函数。
多态成立条件:1、继承2、虚函数重写3、父类指针(引用)指向子类对象

实现原理:1、类成员(struct)和类函数分开存储,函数隐藏this指针,当用父类指针指向子类对象,调用函数时,传入指针类型的this指针(父类this),通过this指针调用子类函数
2、父类子类对象分别有虚函数表,运行时,动态编译,c++编译器根据指针指向的对象找到虚函数表,并从虚函数表找到函数入口地址
3、vptr分步初始化,子类初始化,先调用父类构造函数,c.vptr指向父类的虚函数表->父类构造函数运行完后c.vptr指向子类的虚函数表
表现:子类初始化过程,在父类构造函数中调用虚函数,调用父类的虚函数

虚函数寻址会降低效率,不要用太多
应用:aop,回调

【虚析构函数】
通过父类指针 指向的子类对象,调用析构函数时不会发生多态,只会按照指针类型调用父类析构函数
虚析构函数能够通过父类指针 把它指向的子类对象的析构函数都执行一遍,释放所有子类资源

【重载 重写 重定义】
一个 类内部 重载,子类无法重载父类
父子两类之间的同名函数,虚函数重写,非虚函数重定义(子类覆盖父类的同名函数)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值