EC32

本文探讨了C++中public继承、遮掩继承名词、接口继承与实现继承的概念。解析了is-a、has-a和is-implemented-in-terms-of关系,强调了public继承体现的is-a关系。阐述了如何避免遮掩继承而来的名词,以及如何通过using声明式调用被遮掩的函数。同时,区分了接口继承和实现继承,介绍了virtual函数和pure virtual函数的作用与使用场景。

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

32. 确定你的public继承塑模出is-a关系

classes之间关系有is-a、has-a和is-implemented-in-terms-of,其中“public继承”意味is-a,即适用于基类身上的每一件事情一定也适用于继承类,因为每个继承类对象都是一个基类对象。

【想象成一个集合,继承类包含了基类,基类是继承类的子集】

33. 避免遮掩继承而来的名词
  • 内层作用域的名称会遮蔽外围作用域的名称,c++只看变量名是否相同,并不会看类型和参数列表。

  • 具体看例子:

    此时继承类只能调用mf1,不能调用mf1(int),从其作用域可知。但可以通过调用using声明式达成调用mf1(int)目标,如下图所示。
    在这里插入图片描述
    总结:继承类的名称(不论类型和参数列表咋样,只看函数名或变量名)是基类名称的子集,站在继承类角度看,只能看到子集部分。如果要看到补集,那么可使用using声明式。

34. 区分接口继承和实现继承
  • public继承由函数接口继承和函数实现继承组成。
  • virtual函数表明继承函数接口和实现,成员函数是virtual说明其打算在继承类中有不同的行为。即若不同继承类用该函数做不一样的事情,那么就要在基类对该函数声明为virtual。
  • pure virtual函数表明只继承函数接口,如果继承类没有实现该函数接口,就不能调用这个函数接口,即强迫继承类有该接口的实现版本,可以避免出现继承类忘记重写基类的该函数并对其调用的情况。

总结

若想继承类继承的东西是只继承接口——将该接口变成纯虚函数;继承接口和继承类可以再实现该几口——将该接口变成virtual函数;不改变任何东西——普通函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值