继承封装和多态

本文详细介绍了C++中的继承、多态和封装概念。继承使得子类能够获取父类的属性和方法,但不包括构造和析构函数。多态分为静态(编译时绑定)和动态(运行时绑定)两种,虚函数是实现动态多态的关键,它在对象内存中创建vfptr来指向虚函数表。纯虚函数用于抽象基类,强制派生类实现特定方法。封装则通过隐藏实现细节,实现了代码的模块化和信息隐藏。
摘要由CSDN通过智能技术生成
  1. 继承
    子类继承了父类的成员函数和成员变量,也就是继承了除构造函数和析构函数之外的所有成员。
  2. 多态
    相当于一个接口,基类的指针指向基类的对象时就调用基类的函数,基类的指针指向派生类的对象时,调用的是派生类的的函数。
    (1)静多态(静态绑定/早绑定):模板,重载
    编译时期确定调用哪个类型对象的函数
    (2)动多态(动态绑定/晚绑定):继承+虚函数
    运行时期确定调用哪个类型对象的函数
    (通过寻找vfptr–>找到vftable–>再找到虚函数地址,进行调用,这些都是发生在运行阶段)
    虚函数重点!
    (1)如果一个类里面有虚函数,那么这个类生成的对象会多出4个字节(vfptr)
    一个类有一个或多该个虚函数只生成一个vfptr,对象只多了4个字节,但是虚函数越多,虚函数表就越大。
    (2)类的虚函数表是在编译过程中就生成好的,一个类只有一张虚函数表(虚函数表的个数和类对应,而不是和对象对应。同一类定义的所有对象的vfptr是指向同一个虚函数表的)
    (3)虚函数运行时,存放在 .rodata段,叫做只读数据段(只允许读,不允许修改)
    虚函数的必要条件:
    (1)虚函数的地址要存在虚函数表里,因此必须要能产生函数符号的地址,所以内联函数就不能成为virtual函数
    (2)只能通过对象的前四个字节vfptr才能访问虚函数表,进而访问虚函数地址,虚函数必须要以来对象,所以构造函数不能成为虚函数
    (3)static也不能实现虚函数:static修饰的成员不依赖对象
  3. 封装
    封装可以隐藏实现细节,使代码模块化。
    把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  • 虚函数的作用
    如果派生类从写了一遍基类的函数,没有虚函数的时候只能访问基类方法,有虚函数的时候既能访问基类,也能访问派生类。
    https://www.cnblogs.com/shijingjing07/p/5564812.html
    4.纯虚函数
    在什么情况下使用纯虚函数(pure vitrual function)?
    1,当想在基类中抽象出一个方法,且该基类只做能被继承,而不能被实例化;
    2,这个方法必须在派生类(derived class)中被实现;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值