与面向过程的C语言不同,C++是基于面向对象的语言。
C++的面向对象程序设计
面向对象设计中的对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象的语言有三大特性:封装,继承和多态。
1.访问限定符
C++中有三种访问限定符 :公有( public ),私有( private ),保护( protected )。
访问限定符的作用:
a. public成员可从类外部直接访问,private/protected成员不能从类外部直接访问。
b. 每个限定符在类体中可使用多次,它的作用域是从该限定符出现开始到下一个限定符之前或类体结束前。
c. 类体中如果没有定义限定符,则默认为私有的。
d. 类的访问限定符体现了面向对象的封装性。
2.作用域
C++中有四种作用域:局部域,全局域,类域,名字空间域。
域定义了变量的生命周期和访问区域。
作用域的作用:
a. 每个类都定义了自己的作用域,类的成员(成员函数/成员变量)都在类的这个作用域内,成员函数内可任意访问成员变量和其它成员函数。
b. 对象可以通过 . 直接访问公有成员,指向对象的指针通过 -> 也可以直接访问对象的公有成员。
c. 在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。
3.类实例化对象
类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类的时候并没有分配内存去存储。
一个类可以实例化出多个对象,实例化出的对象要占用实际的物理空间存储变量。
如果说类是一个设计图的话,那么实例化出的对象就是房子,房子才能存储数据,占用物理空间。而设计图只是设计出需要什么成员,但没有实体的建筑存在。
4.sizeof( 类 )
在计算类的大小时,会牵扯一个问题。类中的成员函数占内存吗?占的化,占多少内存?
仔细了解类的调用后不难发现,类实例化可以实例化出多个对象,但是类中的成员函数在调用时总是重复的被调用的。
所以计算机为了代码的更高效存储,执行。计算机会把所有类中的成员函数都整理起来,放在一起。在使用的时候,由汇编代码去call函数的首地址。所以,为了节省空间,成员函数是不会存储在类中,而是在使用的时候,由汇编智能的call成员函数所在的地方。
这个问题解决后,类的大小也就不难计算了。
去除了成员函数得类看起来与C语言结构体很是相似,其实计算类得大小时,方法与结构体计算方法相同。
在计算类的大小时,也要注意内存对齐问题。