怎么简单理解面向对象(基础篇对象和类)
猪年伊始,相信大家的朋友圈都被《啥是佩奇》刷屏了讲述了一个爱与团聚的故事好吧,我这里的这篇小文不是告诉大家如何去买春运的票,也不能让大家说服固执的老人,而是告诉大家如何如何去写代码:,接下来我们就来聊聊关于怎么简单理解面向对象?以下内容大家不妨参考一二希望能帮到您!
怎么简单理解面向对象
猪年伊始,相信大家的朋友圈都被《啥是佩奇》刷屏了。讲述了一个爱与团聚的故事。好吧,我这里的这篇小文不是告诉大家如何去买春运的票,也不能让大家说服固执的老人,而是告诉大家如何如何去写代码:
刚入职的时候,师傅也许就告诉你佩奇就是一个红猪,要你独自开发一个佩奇礼物的实例,你是否也像这位老爷子一样不敢对下刷子呢?
这时候我们就需要了解类和对象的概念了
类,就是具有相同属性和方法的对象的集合
对象则是这类方法的实例
简单说:而猪是一个基类(父类),佩奇是从猪类中集成出来的派生类(子类),老爷子生产出来的钢铁佩奇则是佩奇类再次派生出来类的对象。
我们来看看,如何从“猪”到“钢铁佩奇”吧。
首先,“佩奇”作为一个“猪”,可以沿用的包括“头”、“躯干”、“尾巴”等等属性和方法,但是我们知道,佩奇和普通猪并不相同,首先,它是一个粉红色的;其次,它的头像一个吹风机;还有,四肢短小纤细……
我们现在有一个Pig类,使用关键字class声明,放在大括号{}内。可以使用private、public和protect对变量或者成员函数进行修饰。使用public修饰的成员变量,在程序的任何地方都可以被访问,也就是说可以直接被外界调用,这样很不好,我们通常的做法是把数据隐蔽起来,而把成员函数作为对外界的接口。也就是说,使用private修饰成员变量,这些成员变量不可以被外界直接访问,而需要通过成员函数进行访问。还有一类protected变量,则是受保护变量,在继承时可以访问,但不允许外界直接访问。
这时我们知道佩奇为粉红色,我们是否还需要“void SetColor(color color){itscolor=color;}”呢?显然不需要,只需要直接给出颜色就行。这种做法叫做重载。
重载可以使用同样函数名,但参数不同(数量不同或者类型不同)。在子类中,也可以新增一些变量和函数,比如我们可以描述佩奇的头部,大约如下:
这里的void SetColor()就是对之前void SetColor(color color)的重载。
注意,重载并不只是发生在继承过程中,我们也可以在同一作用域中声明几个类似的同名函数,而这些同名函数的形参列表不同。这里的part DescribeHead(shape eyes,shape mouth)和part DescribeHead(shape eyes,shape mouth,shape nose)就是典型的重载。
当然,如果在子类中使用了和父类相同的函数,这种做法称为重定义。比如color GetColor(),这时父类中的函数就被隐藏起来。
还有一种情况,例如我们知道在子类中必须实现,而父类不便于实现的函数,我们可以在父类中使用virtual关键字声明为虚函数,这时,我们称在子类中实现的过程为重写(覆盖)。
在C 语言中允许“多重继承”,也就是说,一个派生类可以允许有多个直接基类。
比如要实现我们钢铁佩奇的实例,需要从PeppaPig和Material类中继承。如:
这里,我们再介绍一个不定参数的概念,因为不确定需要多少步骤实现佩奇的制作工艺,因此参数的数量不能限制,用“...”表示,使用宏va_start,va_arg和va_end进行控制。由于此时并不能确定参数的数量,因此将可变参数压入堆栈,使用指针遍历堆栈段中的参数列表,从低地址到高地址一个一个地把参数内容读出来。
其中va_start表示第一个可变参数地址;argptr指针上移一个_INTSIZEOF(method),直至最后,使用va_end(argptr)置空argptr,大致的含义与argptr=(void *)0类似。
当然,最重要的一步就是将这个类实例化:
其中“.”表示调用了实例ipp中的make()方法。
好吧,最后,祝大家学有所成,都能在佩奇之年有所收获。
本人学识有限,如有疏漏,欢迎大家留言评论指正。
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com