1.类的定义
1.1 类定义格式
- class 是定义类的关键字 ,后跟类的名字,{}部分为类的主体,(注意:最后类定义结束时不要忘了 ; )。
- 类体中内容称为类的成员:类中的变量称为成员变量; 类中的函数称为成员函数。
- 在c++中,struct也可以定义类(c++兼容c语言),同时struct升级成类,在里面也可以定义函数,不过与class还是存在一些区别。
- 定义在类里面的函数默认为内联函数。
1.2 访问限定符
存在三种:1.public
2.private
3.protected
- C++一种实现封装的方式,用类将对象的属性与方法结合在一起,让对象更加完善,通过访问权限选择性的将其接口提供给外部使用。
- public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private类似,但也存在区别。
- 定义的成员类没有显示修饰时,class默认是private,struct默认为public。
- 一般成员变量都会限制为为private/protected,需要给外部使用的成员函数会放为public。
1.3 类域
类定义了一个新的作用域,类的所有成员都在类的作用域中,在类体外定义成员时,需要使用 :: 作
用域操作符指明成员属于哪个类域。
2.实例化
2.1 概念:用类类型在物理内存中创建对象的过程,称为类实例化出对象。
- 我们可以想象成:我们定义了一个类类型,这个类相当于一个建筑模型,包括材料(成员变量)和过程方法(成员函数),建造师(我们)通过这个类建造出一个一个的房子(对象),就是实例化。
- 我们定义了一个类,但只是声明是一个模型,并没有分配空间,也不能存储数据,实例化成对象后才分配物理空间。
2.2 对象大小
首先,对象里面有些啥?1.成员变量 2.成员函数。成员变量必然需要分配空间存储,但是成员函数就不需要。对于函数,在编译后是一段指令,无法存在对象里,而是存在代码段。我们只能存函数的指针,但是对于成员函数而言,我们实例化出100个对象时,每个对象都有一样功能的函数,一样的指针重复存储100次,就太浪费了。其实函数指针是一个地址,由于成员函数是类的一部分,它们的地址在编译时就已经确定,并且对于所有该类的对象实例都是相同的。这意味着,虽然每个对象实例的内存位置不同,但它们调用同一成员函数时,调用的函数体是相同的。种设计方式有助于节省内存,因为不需要为每个对象实例复制成员函数。
所以讨论对象大小,我们只需要看成员变量,对于c++的类任然遵循结构体内存对齐原则,我在之前的文章中讲过 点击链接结构体对齐
3. this指针
一个类中,当然不止会有一个对象,当存在多个对象时,在调用时,函数是如何知道该访问哪个对象呢?所以c++给了一个隐形的this指针。
编译器编译后,类的成员函数默认都会在形参第一个位置,增加一个当前类类型的指针,叫做this
指针。
分享到这。
个人主页点这里~