C++的继承和多态

本文介绍了继承的概念及其分类,包括公有、保护和私有继承的特点,并详细解释了单继承和多继承的区别。此外还探讨了组合的概念及其实现方式。最后,文章深入解析了多态的含义以及虚函数和虚继承的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承

继承:一个类继承其父类(基类),根据继承类型的不同会拥有其父类不同的权限

继承的分类

公有继承:基类的变量成员不变
保护继承:基类的公有成员和保护成员对派生类来说都为保护成员,只能被它的派生类和友元访问,私有成员不变
私有继承:基类的所有成员对派生类都是私有成员,不可以被该派生类的子类访问

继承的种类和组合

单继承:一个基类一个派生类,一一对应
多继承:一个派生类有多个基类
组合:一个类内嵌其他类,或者说是包含其它类

多态

多态:多态允许派生类有其独特的特性。

虚函数和虚继承

1.虚函数:将成员函数前面标上virtual,派生类可以对该成员函数进行实现,这样可以让基类变量的指针访问派生类对象的成员函数
2.虚继承:多继承的情况下,如果类d的两个父类b、c有相同的基类a,对该派生类来说会在内存中存放两个基类a,这样增加了代码的体量。如果在b,c继承的关键词前面加上virtual,就成为虚继承,对于类d来说,只会存在一个基类a的实现;

虚函数表

编译器会为每一个拥有虚函数的类添加一个指针,指向并创建一个虚函数表,是一块连续的内存,存放每一个虚函数的调用JMP指令,该表中基类的虚函数放在前面,如果该虚函数在子类中有实现,就会将子类的实现放到基类处。由于在访问时总是前面的优先,所以指向基类的指针才能访问派生类的虚函数实现

注意

1.继承是is-a的关系,组合是has-a的关系
2.一般不推荐使用多重继承,推荐使用组合
3.避免子类中的成员和父类中的非virtual成员拥有同样的名称,从而产生遮掩,不利于调用
4.不要改变继承而来的缺省参数值。因为继承是动态绑定,缺省是静态绑定,会造成调用virtual函数时使用基类的默认参数值
5.私有继承对组合的优势是不用对空类赋予额外开销,在函数库等对内存要求高的开发中才可能用得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值