每日一言
你的价值,由你自己定义,无需他人评判。
C++的继承
直接上案例
继承是什么意思呢,就是我本来这个类我叫他基类、我希望创建我的下一个类有我这之前的类的属性和方法,那么我如果不用继承的话,就需要多写很多一样的代码,那么就是不好,不性感,那么这边有个叫做继承的概念,可以让我们新创建的类去继承我们的之前的类,而且现在新创建的类不写之前的类的属性和方法,我们也可以进行使用,当做自己写了这些属性和方法,那么我们也可以添加新的属性和方法,这个就叫做继承
我们称之前的那个被继承的类叫做父类、基类,新的那个类叫做子类、派生类
我们这边用了一个案例 一个叫做手机类 一个叫做苹果这个类
那么很明显手机类是父类,苹果类是子类,那么我们的手机类中的属性,我们的子类也可以用,怎么继承呢??用什么符号?我们写子类的时候这样写
我们一般写写类不是就是这样写的吗 class phone{}这就结束了。但是我们是要作为子类去继承父类的所以我们要加上 :
这个public是什么意思呢,就是说我们的子类要是想用父类的属性或者方法,即使父类那边写了public都不行,也会变成private ,所以我们就需要自己加上public,这样我们就可以随心所欲调用父类的属性和方法了,
像我们main函数里面就是子类调用的父类的属性name ,但是我们子类并没有写这个属性,所以这个就是继承的好处,不仅仅是省去了代码,提高了代码的复用,还有很多其他的好处在未来我们玩更大的项目的时候就可以体会的到了
分文件优化继承
这个是什么操作呢?是不是和我们在c51的时候之前学的分文件优化代码很像,确实很像啊,就是为了不让我们的代码那么多,又臭又长,那么我们要进行分文件处理,就是本来300行的代码,什么鬼都有,类的声明和实现也在,什么都有,现在我将它们单独分在一个文件里面,这样不就好了吗,这个就是分文件优化代码的意义。
那么开始吧!!!
事先说好哈我们要继承父类嘛,所以我提前用以下的方法创建了一个类叫做Animal
步骤1,右键项目
选择C++class
输入Dog(子类名)
这个Base class就是继承的意思,然后我们目前的话可以自己写上去如下图的Animal
创建文件后会自动跳到dog.h文件发现不认识Animal,因为要包含animal.h这个头文件,我们这个创建的Dog类的话,会生成dog.cpp和dog.h文件
添加后,我们也把函数的声明写出来,那么此时我们不是需要将函数的实现写出来吗,哪里写在dog.cpp也就是该类的cpp文件里面写,这边有个快捷的方法,就是右键我们的函数,就是右键我们写好的 dogShout()这个函数,里面有个Refactor(重构)的里面有个在dog.cpp中添加定义
那么就来到了我这张图
我们将函数进行实现
实现完之后我们来到mian.c文件,这边就是我们的主战场了,和我们之前的是一个意思,我们创建Dog的实例化对象,会发现不认识Dog,那么我们就知道需要添加dog.h头文件了
然后我们就实现了
这个就是我们的分文件优化继承,
权限对继承的影响
主要是记住这张图权限对继承的影响图,
我抛出代码我进行讲解
这个就是我进行测试的代码了,什么意思呢
- 我在基类中创建了public、protected、private属性的变量
好的现在我创建了一个名为TestClass的子类去使用private属性去继承父类,
那么此时我们要知道,我们使用任何属性继承父类后,父类中的属性都有可能会被降级,降级什么意思呢就是父类的public属性的成员变量,会变成protected属性的成员变量,或者是其他的降级
因此我们就要进行判断权限的变化
好的,我们这边使用private属性去继承父类,那么父类中的public属性的变量会变成private protected属性的变量会变成private ,然后private属性的话本来就不能被继承,要说降级的话可以是说降级到不可访问
那么我们就可以根据权限变完后的的权限等级我们去看这张表,看一下有那些数据我们可以如何去调用,比如有些只能在类内部被调用,有些类外部可以被调用,等等
我们结合案例,我们这边,进行private继承后会发现,父类的public权限的变量和protected权限的变量都降级成了private,那么我们根据上面那张表可以知道,此时只有类内部可以调用private权限的变量,所以我们这个price可以被调用,不会报错,当然protectedData=10;这个protect权限的变量也不会报错,也是可以的调用的
看我们也在类的外部创建了一个对象来进行调用price,那么肯定是不行的,因为我们可以根据那张表来看,类外部是不允许调用protected权限的变量的
其实其他的也都是这样子来判断,主要就是结合我们的这两张表来进行判断,要熟记于心噢,这边我只用一个来解释,其他两个子类的调用的操作,得出报错还是不报错,也是这样去了解的
总结来说:子类用不同的权限去继承父类,那么父类中的权限属性变量 会发生降级的影响,也就是权限会变低,我们俗称权限的高低由public->protected->private依次降级。
那么我们根据变化后的权限要知道,我们在不同的区域块(类内部、同一个类的对象、子类、类外部),对这些权限的变量的调用许可,做到这一点就行了