00:00
好,我们接着往下边看,那现在呢,我们来看几个关于面向对象编程的这个继承的课程练习,我们看一下大看这里啊,这有个继承的课程练习题,他说结构体的匿名字段是基本数据类型,它也是可以直接。嵌入到这个结构体里面的,大家看啊,比如说我这里大家看这里,我这有一个type a对吧,那么这个A呢,我可以嵌入到以匿名的方式嵌入到structure,前面讲过了,但是呢,我告诉大家就说。在这个结构体里边呢,其实你也可以嵌入这种基本数据类型,比如说int。那你如果是嵌入这个int这种这种结构体呢,呃,这种这种字段呢。因为它是基本数据类型。它不存在,就基本数据类型,它自己是没有字段的,因此在他在访问的时候就直接通过这个名字就student点这样就可以了。看到没有,也就是说,也就是说这这种用法在功能里面也是允许的,我给大家简单的演示一下啊,我给大家简单演示一下,还是写在我们再写一个戏。
01:11
就直接写到这吧,大家看一下就行了,好吧。比如说我这有个结构体,大家看到。Type。Type,然后呢,这个结构体,比如是个monster。啊,Monster,那monster呢,里面有一些这个字段structure。比如说your name对吧,Name是个寸。好,假设呢,它还有个年龄inch就写完了,那假设我这里有一个,我这里有一个结构体叫做什么呢?呃,我看前面是D,那这有个结构体叫E,好吧。那如果说我们现在把这个monster以匿名结构体方式把它嵌进去,这是没问题的,同时呢,我们也可以把这种基本数据类型也作为一个匿名,匿名字段把它放进去,这也是允许的,就这种方式也是没问题的,就相当于说在一里面呢,有一个匿名字段,它是基本数据类型叫int,那这种情况下怎么去用这个int呢?给大家简单演示一下。
02:12
来,放这儿。演示一下就是呃,匿名字段。匿名。匿名字段是什么呢?是基本数据类型。基本数据类型的使用。那刚才我们写了个E对不对,那就这样写的VR。E大写的E,这样就完事了,那用的时候如果是monster的用法,是不是前面我们讲过你直接。写他的name,这样就可以了,因为这个name呢,就是实际上说白了,他全写到应该是monster.name但是因为只有一个name,所以说你可以简写对不对,这样子写是没问题的,比如说我给他取个名字叫做狐狸精。对吧,狐狸精,然后呢,我也给他有个年龄,这是可以的,一。
03:02
1.a,比如是300。没问题吧,那假设这里面呢,我要去访问他的这种匿名,匿名字段是基本数据类型的时候,怎么用呢?它是这样用的,直接点int就可以了。直接演绎的,比如说给他一个20,这也是可以的,那我给大家输出来一下。E等于把这个输出好,我们来看一下是一个什么样的情况。好,我执行一下啊,同学们跑起来,我们可以看到这个地方呢,它仍然可以正确的输出诶。看到到这里。大家看这里对吧,是不是也输出来了呀,那我给大家再强调一点啊,强调一点,如果你这有一个int了,你就不能再有,不用不能再有相同的这个int字段了,因为它无法区分了,如果你一定还要有int的话,那前面就一定要有个名字,比如说你写一个N,这样是可以的。
04:02
就说如果你又你你这你给这个int一个名字,那就相当于说在这个一里面有一个字段名叫N,它的类型是int,这样也可以区分明白吧,这样写也是可以的,那用的时候呢,就这样用。那你在用的时候就是e.N了,诶这样也可以,比如说给他一个事实。那这样子我们来使用一下,大家看这里,诶,你看这样输出呢,也是没问题的,看到没有,好在这里呢,我们就把这这个使用方式给大家,呃,说到这里来了,好吧,课堂练习举了一个结构体命名字段是基本数据类型,它也是可以这样使用的,那我们把这个呢给大家整理到代码里边去,对吧,这是一个课堂练习。板述一下。课堂练习。课堂练习第三。没问题吧,好,把它放这。OK。啊,那这个地方呢,我们举了一个案例,举了一个什么案例呢?在这里我定义了一个结构体。
05:07
对吧,定义的一个结构体,这个地方嵌入了一个什么呢?这嵌入了一个匿名字段,这个匿名字段是基本数据类型。匿名字段是基本数据类型,它也是可以这样用的啊,就说如果你看到别人这么用,那你不要觉得人家这样写是错误的。对吧,这样子用,那用的时候呢,它核心代码怎么去使用,这这样使用的。这样使用对吧。好,这样子就OK了。那我把它拿到我们的笔记里边去。没问题吧,好,这个大家体验一下,这是就这么一个题,就这么一个题,我这说明一下啊,如果你这有一个T,你就不能再有相同这个int名字了,就说说明啊。我说你吧。就是说明一。就是如果。
06:00
如果。如果一个字段啊,一个结构体中,结构体中有一个int类型的,Int类型的匿名字段了,匿名字段就不能再有第二个了,它最多只能有一个有int类型的匿名字段。就不能再有第二个,就不能有第二个了。第二个。对吧,点A第二个。没没问题吧,如果你一定要再有一个in特呢,那你怎么办?用个用一个名字来区分,如果一定需要,如果需要有两个或者多个啊,有多个in。类型的字段就需要用名字区分。则必须。则必须给给这个字段取个名字。这个int字段取名字。指定。对吧,指定。指定名字好了,这两点大家注意一下就可以啊,这两点大家注意一下就可以,那接着呢,我们呃,再来看下面的一个,就是关于多重继承的概念,多重继承呢,其实在前边我们已经给大家讲过了,只是没有把这个概念抛出来,哪里讲过呢?大家看这里,我们在讲这个细节的时候,大家看这。
07:20
同学们看这里,我们在这个TV里边,在这个TV里边有两个结,匿名结构体,那就说明我这个TV继承的固执,同时又继承了brand。其实这个就是一个多重继承的案例,明白吧,好,那么把这个概念再抛出来一下啊,如果一个structure嵌套了多个匿名结构体,那么该结构体可以直接访问嵌套结构体的字段和方法,从而实现了多重集成,这个就叫多重继承,明白吧。也就是说,嗯,在勾浪里面,它实现多重继承,其实就是呃,嵌入多个匿名结构体,这点大家注意一下,那这个案例呢,我就不再多说了,前面已经有,我把这个案例拿过来就行了,好吧,这是多重精神的概念。
08:05
我把它单独的提出来好吗?毕竟它是一个概念,就怕别人问到你说,诶面向对象这边有个有个多重继承的概念,是怎么回事,大家答不上来。好,我把它板书一下,我把它板书一下。OK。多重继承。好。呃,多重继承的说明。反输一个好,如果一个structure里面就是这个啊,一个structure里嵌套多个多个匿名结构体。那么这样就实现了多重集成。理解好,那么我们这还有个案例,把这个案例给他走一下,对吧,把这个案例走一下。呃,这个案例呢,我们在前面已经有了,我把它案例直接拿过来用就行了,大家看这里。这个就是一个多重继承。看到没有?为什么这么说?因为你这个。这个故事它。
09:02
继承了这个brand是吧,它继承了这个brand好,所以这样就相当于继承了两个,那你这个TV里面呢,既可以使用固执里面的属性和方法,又可以使用brand里面的属性和方法,注意它如果有方法也可以使用啊,也可以使用好这个呢就是我们所说的多重继承。好,我把它放好。没问题吧,好,这是关于多重继承的一个概念,那这里面还有关于多重继承呢,我还要再点一下啊,就是多重继承的细节,那如果嵌入结嵌入到这个匿名结构体。嵌入的匿名结构体有相同的字段名和方法,在访问时则需要匿名结构体类型来区分,这点其实在前面已经说过了,怎么个意思呢?就是这,比如说你这故事里面有name,你这个brand里面也有name,那你就必须给他一个,呃,把它这个匿名结构体的名称写出来,再点name才能区分。
10:01
就这么一个细节,其实这个呢,在前面我们已经讲过了,对吧,还有一个就是在保证,为了保证代码的简洁性,那么在我们做购让开发的时候呢,建议大家尽量不要使用多重集成,因为多重集成呢,它是比较容易把这个思路,就是把你的这个思路搞坏的,所以说在很多编程语言里面,其实已经把这个多重基层拿掉了,但勾浪设计者呢,因为他本身就是C语言的设计者,因此他把这个多重基层特性呢,还是保留下来了,但是呢,他也说在相关的文档里面也说了,尽量不要使用多重基层,为什么?因为多重基层很容易把这个进程关系呢,就把它搞搞复杂了,所以说我这写了一句话,建议大家尽量不要使用多重进程。好,这一点呢,我们把它。整理到我们的这块代码里边多重继承的一个细节。好吧,多重细细细节。好,我说了两点,第一点对吧,这个。
11:06
第二点呢,为了保证简洁性啊,要注意它的一个使用。呃,那在这里呢,我多说一句哈,就是这个案例,案例呢,其实前面已经有了,我拿过来用一下就行了。怎么在哪里用的。在这用的。在在哪里用的。看一下。哦,这方只是这方只是把他那个声明了一下,用的时候还真没有说啊,那我就把它再单独说一下,单独说一下啊,我们我们举个例子吧,举个例子。啊,这有固执。他这个案例好像在前面讲过,就这个啊,应该是讲过的,看到没有c.a对吧,说过,那也就是说如果我们这我以这个为例吧,好吧,以这个为例演示一下。演示一下,呃,怎么去访问呢?访问good的名字。固执的名字,你就不能这样写了。
12:00
啊,你注意看。那给大家演示一下,你比如说现在TV。TV,你要去访问谁呢?访问这个故事里面name你,你就不能这样写了。为什么你不能这样写呢?因为固执里面有有这个name,而brand里面也有name,所以说你这样一写,他一定会给你报错的,大家看一下。看这里是不是已经报错了?他说你这个TV name我无法区分。无法区分。因此呢,你。诶,你这个时候呢,就要写这个A啊,写这个goods,这样才能够告明确的告诉编译器说我这个这个地方的name是从故这个结构体里面去,呃来访访问这个结构体的name字段明白。啊,这边一定要写上,当然了,有同学说了,说老师,嗯,那如果如果这个TV去访问它里面这个价格行不行呢。呃,那就要看你good里面有价格,Brand里面有没有价格呢?Brand里面没有价格,那就可以用,比如说这个地方我直接写price,这也是可以的。
13:06
为什么这么说?因为你这个TV里边他欠了两个匿名结构体,一个是固执,一个是brand,但是brand里面呢,它没有price这个字段,因此它是可以区分的,好吧,建议大家注意一下就行了,来,我把这个呢也给大家拿过来好吧。就是告诉大家这是怎么一个用法。好呃,现入写如上啊如上它应该怎么使用呢?应该这样使用。对不对,刚才我们在这做了一个说明,就这样使用就行。OK,这两种用法都是OK的。啊,这是OK的。这原因我就不再多说了,好吧,因为这个name,它有brand和故执里面都有name,因此必须用匿名结构去区分,而brand price呢,因为故执里面有,而brand里面没有,所以它自动就能区分好,把这个呢,给大家整理到笔记里面去。
14:01
好,同学们,那关于多重继承的细节,这两点我们就给他说完了,好的,那关于这个多重继承呢,我看看下面还有什么东西要说啊,下面是接口了,那么我们把多重基层呢就讲解到这里。
我来说两句