一、类的概念
类,属于用户自定义的数据类型,一个类也包含两部分(类的属性和类的方法)。类的方法也就是类的行为,实际上也是类中封装的函数;属性则是类里面的成员变量。
C++在数据结构中与C语言差异最大的就是在C++中有类和对象。类和对象是一起的,就和结构体与结构体变量一样的关系。其中类和结构体是非常相似的,所以很多人在学习类的时候就会把C++的类看成与C语言的结构体一样。
虽然类和结构体很像,但是它们还是有明显的区别的。首先是定义使用的关键字不同,接着里面可以包含的成员类型不一样。类相对结构体能包含的成员类型会多很多。
什么才是类,其实这个比较抽象了。万物皆为类。人是人类,动物是动物类、球类、车类等等!不同的类有不同的属性。
人类:身高、体重、姓名、性别等
车类:品牌、价格等;
球类:价格、大小等;
回顾一下C语言的结构体:struct Foc{成员1;成员2;};struct Foc这个是结构体的类型。
对比一下,C++中有一个专门处理字符串的类,String类,这个类里面就包含了很多方法,这些方法用来处理字符串的不同功能。使用String定义的对象,就可以直接使用这些类。这样说可能有点不太明白。结合C语言处理字符串的函数来说。在C语言中有strlen()、strcmp()、strcpy()等等这些函数都是用来处理字符串的。但是它们都是独立的函数。在String类中,就是把这些独立的函数都包含到了类的方法里面。这个类就是把字符串处理在C++中封装成了一个类。当然这个类里面的方法还有很多很多。不仅仅是这几个。
二、类的定义
使用C++中使用关键字class来定义类,其基本形式如下。
说明:
(1)类名需要遵守一般的命名规则:首字母大写。
(2)public与private和protected为属性/方法限制的关键字。作用如下:
public:公有属性/方法。表示该部分内容是公开的属性和方法,类外是可以直接访问或者调用的;
private:私有属性/方法。表示该部分内容是私密的,不能被类外部所访问或调用,只能在类内部访问。
protected:保护属性/方法。表示该部分内容是受保护的,只能在类内部或者子类内部成员访问。不能被类外部以外的地方方访问。
一般来说,在c++中提供的标准类,类的属性成员基本都设置为private,public只留给那些被外界用来调用的函数接口。但是这个并非是强制性的,开发者在自定义类时可以根据自己的需求来调整。
(3)结束部分的分号不能省略。
三、类的使用
一、类的C++标准使用
(1)类的对象声明
定义了一个类,要访问类里面的属性或者方法,需要定义一个对象。对象是类的一个变量的,在C++里面类的变量别名为对象。其关系就是结构体与结构体变量的关系一样。
具体定义如下:
使用关键字 new来实例化一个对象。
说明:
在上面定义的类中,在公有属性里面定义了一个变量和一个函数作为类的属性与方法。值得一提的是,在C++类里面是可以直接定义函数的。而在结构体里面是不能直接定义函数作为结构体成员的,只能是定义函数指针,使用函数指针的形式去指向一个函数。
在C++中,创建一个对象,又称实例化一个对象。使用关键字new。可以看出创建出来的对象前面带有*,可以简单的理解成这是一个指针类型的对象。所以在使用这个对象访问类的成员时是使用 -> 这个符号来(与结构体指针变量的访问是一样的)。
上面就是定义一个类,然后创建一个对象去访问类的成员的过程。值得一提的是,类里面的函数是直接在类里面定义的,这样会显得很不好看。C++也是有解决方法的。它可以支持函数在类外进行定义,然后在类里面声明函数就可以了。具体如下。
说明:
上述中,把类里面的成员函数定义在类外部,然后在类里面进行声明。这样这个函数就属于这个类的了。
作用域(::)
函数定义在类的外部,然后在类里面进行声明,它们之间是需要进行关联的。不然这个函数与这个类是没有关系的。使用作用域进行关联。
定义在类外部使用到了一个关键符号 (::作用域),作用域的左边为函数名,作用域的右边为归//属地。可以理解为,使用作用域时,作用域的左边的内容归属于作用域的右边。函数定义在类外部,需要使用类名声明。
二、类的C语言方法使用
类的访问,其实还可以使用c语言的方式进行访问,与访问结构体一样。如下。
如上述,使用定义结构体变量的方式去使用类。
四、类的属性说明
根据上述诉述,类的属性有三种。在上面对类的简单应用中,都是吧类成员定义在了公有属性里面。另外的私有属性和保护属性并没有。
公有属性:公有属性的使用就如同上面一样,定义在公有属性里面的成员,是能在类外部,声明对象来进行访问和调用的。访问范围在全工程项目。
私有属性:私有属性的访问范围只能在类内部。疑问?既然访问范围只能在类内部,不能在类的外部调用访问,那么它是在那里用呢,用来干嘛呢?这个待会在说。先看私有属性的访问方法。
如下是正常访问私有属性的模板
说明:
上述在类里面定义了两个私有属性的成员。它们的访问只能在类里面。上面使用公有属性的函数去访问,在公有属性函数里面访问私有属性的成员,是可以正常对其读写操作的,和普通变量一样。只是它范围只能在类里面。
如果想要在类外获取到私有属性成员的值,可以像公有属性函数cope_pd()函数一样,返回值是私有属性的值。
或者想在类外去修改私有属性成员的值,可以使用形参的方式进行。就是利用公有属性的函数形参传入一个值,在把这个形参的值赋值到私有属性。
总之,在外部想要对私有属性进行读写,则需要通过公有属性的成员来实现。类外的对象不能直接访问私有对象。
以下是在类外使用对象对私有属性进行访问时,会提示的故障。
虽然私有能在类外被对象正常选中,但是这样是过不了编译器的。直接报错。
一、类分属性的个人理解
首先,理解一下。类为什么要分公有属性、私有属性、受保护属性呢。其中还有私有属性和受保护属性在类外是不能直接访问的。只有公有属性能在类外进行访问。
试想一下。我们定义一个类的目的,是为了方便规划和封装程序。能把很多数据信息放到类里面,然后通过类声明的对象就可以在程序中很有规划的去访问。当然这个这个权限是属于公有属性的。
那么私有属性和受保护属性存在的意义是什么呢。当然网上的说法就是,我定义了一个类,当这个类在外部进行使用时,或者被别的类进行了继承时。我有些数据信息不想给外部使用,就=所以就定义到了私有属性。那些可以给外部使用的就定义成公有属性。
虽然这个解释很有道理。并且我们已经知道如何去使用公有属性和私有属性了。但是因为我们做嵌入式的开发,很少有人去定义类的私有属性和公有属性。一般都是直接全部公有属性来使用。
所以这里就简单的介绍了私有属性的访问方法。但具体怎么用,什么情况下使用。还需要具体看项目需求。这个可能后续想要有用到的,会补充这部分内容。
我这里给出的理解是:在一些很丰富的类中,这个类能实现的功能有很多(这里能实现的工,是外部能访问的一些接口函数(指类的公有属性函数))。这些函数能实现很多功能,然后这些功能函数是开发人员能使用的,目的是帮开发员解决某些事情。但是这些功能函数是固定的,并且里面的实现过程并不想给开发人员知道,开发人员也不需要知道。这时候这些核心代码就定义在了私有属性或者受保护属性里面。在定义一个公有属性的函数去调用这个核心代码。这样开发人员只需要调用这个公有属性就可以间接的去调用这个私有属性了。从而达到了即实现了功能,又不需要去看里面的过程。这也是面向对象编程的一个重要思想。
二、三种属性的访问权限范围
public(公有属性):公有属性可以在类内部或者类外部进行访问。
private(私有属性):私有属性只能在本类内部进行访问,不能在类外部以及其它子类内部进行访问。
protected(受保护属性):受保护属性只能在类内部访问,这个类内部包括本类和其它继承它的子类都可以,子类访问范围也只能是在子类内部访问。不能在类外部进行访问。
更多精彩内容还请持续关注下一篇!