类与对象—1

不飞则已,一飞冲天;不鸣则已,一鸣惊人。这篇文章主要讲述类与对象—1相关的知识,希望能为你提供帮助。
        我以后的博客会穿插着更新C++,数据结构(C语言)和Linux的相关知识,以后也会慢慢更新一些经典的面试题,希望大家可以多多支持!!!
        那么我们现在就开始今天的知识点,今天要讲的内容是对于C++非常重要的类和对象的有关知识点,这一内容,我计划分5次带大家全面的了解类和对象。(使用编译器为vs2013)
        首先我们来谈谈两种思维方式:第一种是面向过程,就是一种以过程为中心的编程思想,举个例子,我们在家想吃外面的饭,就需要下楼,去饭店,叫服务员,点餐,等待.....这个过程就是面向过程的核心,更注重一个命令的整个过程;第二种是面向对象,把数据及对数据的操作方法放在一起,作为一个相互依存的整体,还是上面的例子,我们想在家吃外面的饭,我们只需要打开手机,点外卖即可,我们只需要发号命令,不需要自己操心中途的过程,可以省去很多步骤和时间。
【类与对象—1】        那么再说回我们熟悉的编程语言,C语言就是很典型的面向过程的语言,重点关注过程,分析求解问题的步骤,通过函数逐步解决问题;C++语言就是基于面向对象的语言,重点关注对象(具体的实物),将一件事分解为不同的对象,有对象之间交互完成。
接下来,我们来介绍C++语言中的重点知识:类和对象。

        我们先看上面的代码,在C语言中,这就是错误的结构体,结构体中不能有函数存在,只能放入简单的定义变量;但在C++中,结构体(类)不仅可以定义变量,还可以定义函数。由于在设计C++时考虑到C语言的存在,所以在cpp环境下,C语言的代码也可以正常运行,但是,人们还是更喜欢C++特有的class定义类。
        类的定义,关键词:class,类的名字为Student,中的是类的主体。类中元素称为类的成员;类中数据称为类的成员变量或类的属性;类中函数称为成员函数或类的方法。
        接下来介绍类的两种定义方法:(1)成员函数放在类中(2)成员函数的声明和定义分开。第一种也就是上图所示的类中既有成员变量又有成员函数;第二种就是在类中放函数的定义和成员变量。(如下图)

两种书写方法都比较好理解,以前数学C语言的项目就经常用到类似第二种方法。接下来我们来讲解图中画圈的解释。
首先我们要了解类的访问限定符和包装。
访问限定符:就是C++实现封装的方式,用类将对象的属性与方式结合在一起,让对象更加完整,通过访问权限选择性的将接口提供给外部的用户使用。

说明:访问权限作用域从该访问限定符出现开始位置到限一个访问限定符出现位置为止

如上图,public的作用域就是从这行开始到private之前;private作用域就是此行开始,到类结束。
那么,问题来了,既然有类有限定符,那么class和strcut的限定符是什么呢??
        在C++编辑器下,既要运行C++语言又要兼容C语言,所以C++中struct才可以当成类使用。两者的区别也就在限定符:struct的默认访问方式为public,class的默认访问方式为private。
现在我们来聊聊面向对象的三大特征(有些书说的是四大特征):封装,继承,多态,(抽象)
在类和对象阶段,我们只需要了解什么是封装即可,那什么是封装呢??
        封装:就是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现方式,仅对外公开接口来和对象进行交互。举个例子,就像我们手中的手机,他只有插入电源,耳机插孔,卡槽三个可使用的接口;我们点击手机,我们并不知道手机内部的运转方式,它就可以反应我们的行为。
                                                         
接下来,我们来谈上面说过的类的作用域,就是类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要用到::(作用域解析符)知名成员属于哪个作用域。

我们在声明类外部声明函数时,只需要在函数名前加类::就代表该函数属于类作用域。
        下来我们来说类的实体化,其实理解起来很简单,就好比下图,类就相当于int类型,a1就是Student的实体化。我们也可以更直观的理解为类就是一个模型的设计图纸,类的实体化就是拼出来的模型。相应的,类不能存储实际存储数据,只有类的实体化可以做到,占用内存空间。

最后一点就是计算类对象的大小,我们先来看一段代码:
                               
我们通过此代码调试可以发现,a1调用的是Init和Print函数,a2调用的也是Init和Print函数。
               
        按照正常的计算逻辑,a1与a2的大小应该先相同,都是36;但是由于调用函数的地址都一样,为了节约空间,那么最人性化的应该是个a1和a2两个指向函数的指针
                   
但是最终实际运行:

我们发现是28,那么这是怎么出来的呢??

刚好28字节,所以我们可以得出结论,在类的大小计算中,成员函数并不在计算范围内。
好了,今天的内容就到这里,希望大家可以认真观看其中的知识点;如有不足或是错误的地方,希望大佬批评指出,感谢观看!!!!



    推荐阅读