对象是类的一个实例,类是对同一种对象的什么,一个对象则是类的一个什么
以后我的博客会穿插更新C,数据结构(C语言)和Linux的知识,以后还会更新一些经典的面试问题。希望大家能支持我!
那么就从今天的知识点开始吧。今天的内容是关于C非常重要的类和对象的知识点。这个内容,我打算分五次带你全面了解类和对象。(使用的编译器是vs2013)
首先说两种思维方式:第一种是面向过程的,这是一种以过程为中心的编程思想。例如,如果我们想在家外面吃饭,我们需要下楼,去餐馆,叫服务员,点餐和等待.这个流程是流程化的核心,更注重一个订单的全过程;第二种是面向对象,把数据和数据的操作方法放在一起。作为一个相互依存的整体,还是上面的例子。我们想在家外面吃饭。我们只需要打开手机,点外卖。我们只需要发出编号命令,中间不需要担心流程,可以节省很多步骤和时间。
然后,回到大家熟悉的编程语言,C语言是典型的面向过程的语言,以过程为中心,分析解决问题的步骤,通过函数逐步解决问题;c是面向对象的语言,它以对象(具体对象)为中心,把一件事情分解成不同的对象,对象之间是有交互的。
接下来,我们来介绍一下C语言中的关键知识:类和对象。
我们先来看上面的代码。在C语言中,这是错误的结构。结构中不能有函数,只能放简单的定义变量;但在C中,结构(类)不仅可以定义变量,还可以定义函数。因为设计C时考虑了C语言的存在,所以C语言的代码可以在cpp环境下正常运行。但是,人们还是更喜欢C特有的类定义类。
class的定义,关键字:class,类的名字是Student,{}里的那个是类的主体。类中的元素称为类的成员;类中的数据称为类的成员变量或属性;类函数被称为类的成员函数或方法。
接下来介绍类定义的两种方法:(1)将成员函数放在类中;(2)成员函数的声明和定义是分离的。第一个是上图所示的类既有成员变量又有成员函数;第二种是将函数和成员变量的定义放在类中。(如下图所示)
两种写法都很好理解。过去,在数学C语言的项目中经常使用第二种方法。接下来,我们来解释一下图中的圆圈。
首先,我们需要了解类的访问限定符和包装器。
访问限定符:是C实现封装的方式。它将对象的属性和方式与类结合起来,使对象更加完整,并通过访问权限有选择地向外部用户提供接口。
注意:访问权限的范围是从访问限定符的开头到受限访问限定符的结尾。
如上图,公有的范围是从这条线到私有之前;私有作用域是这行的开始,也是类的结束。
那么,问题来了,既然有带限定词的类,那么class和strcut的限定词是什么呢?
在C编辑器下,需要运行并兼容C语言,所以C中的struct可以作为类使用。两者的区别在于限定符:struct的默认访问模式是public,class的默认访问模式是private。
现在我们来谈谈面向对象的三个特征(有些书谈到了四个特征):封装、继承、多态、(抽象)
在类和对象阶段,我们只需要知道什么是封装,那么什么是封装呢?
封装:是数据和操纵数据的方法的有机结合,隐藏对象的属性和实现,只向公众公开接口与对象交互。比如,就像我们手里的手机,只有三个可用的接口:插电源、耳机孔、卡槽;当我们点击手机时,我们不知道它是如何工作的,它可以反映我们的行为。
接下来说一下上面提到的类的作用域,即类定义了一个新的作用域,类的所有成员都在类的作用域内。要在类外定义成员,需要使用:(作用域解析器)一个众所周知的成员所属的作用域。
当我们在类外声明一个函数时,只需要在函数名前加上class:就可以了,也就是说这个函数属于类的作用域。
先说类的物化。其实理解起来很简单,就像下图。类相当于int类型,a1是Student的物化。我们也可以更直观的理解,一个类就是一个模型的设计图,一个类的物化就是一个拼出来的模型。相应的,类不能存储实际的存储数据,只有类的物化才能做到,占用内存空间。
最后一点是计算类对象的大小。让我们先来看一段代码:
通过这段代码调试,我们可以发现a1调用Init和Print函数,a2调用Init和Print函数。
按照正常的计算逻辑,首先a1和a2的大小应该是一样的,都是36;但是因为调用函数的地址是一样的,为了节省空间,最人性化的指针是a1和a2。
但是最后,实际操作:
我们发现它是28,那么这是怎么出来的呢?
刚好28个字节,所以我们可以得出结论,在计算类的大小时,成员函数不在计算范围内。
好了,今天就到这里。希望大家认真看知识点。如有不足或错误,望各位批评指出。感谢观看!
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。