1、类是对现实世界中事物的抽象,将具有相同属性的一类事物称作类,类的实例称为对象。类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体,类具有对数据的抽象性、隐藏性和封装性。类对象的行为类的内部数据和方法决定,外部行为通过操作接口实现。
2、类、对象的定义
包括两部分:
a.说明部分:数据成员、成员函数
b.实现部分:成员函数实现
访问权限:
public(公有):提供类的接口,可以被成员函数和程序中被访问;
private(私有):被隐藏的数据,只有该类的成员函数和友元函数才可以访问,通常将数据成员定义为私有成员;
protected(保护):受保护的成员,具有公有成员或私有成员的特性;
对象定义:
格式:<类名> <对象名表>
CTask objTask;
定义CTask 类的对象如下:
CTask objA,objB[5],*pobjC;
其中:
objA 是一般对象;
objB[5] 是对象数组;
pobjC 是指向类 CTask 对象的指针;
创建对象时,每个对象的数据成员具有不同的存储空间,以存放不同的数据,但成员函数为每个对象所共有。
我们也可以注意到,一个类对象所占内存空间由它的数据成员所占内存空间总和决定,而类的成员函数不占据对象的内存空间。
3、对象访问成员
与结构体变量访问成员的方法相同,有如下两种:
访问一般对象成员 :<对象名>.<数据成员名>
<对象名>.<成员函数名>
访问指向对象的指针的成员:<对象指针名>.<数据成员名>
<对象指针名>.<成员函数名>
4、成员函数的定义与调用
定义类中的成员函数可以采用三种方式:
a.成员函数的定义及实现在类体中完成;
b.成员函数的定义及实现在类体外完成;
c.成员函数的定义及实现在不同的文件中完成;(常用)
常用调用成员函数的方式:
a.成员访问符调用
CTask objA;
objA.MyFun( );
b.指向类对象的指针调用
CTask *pobjA;
pobjA=&objA;
pobjA->MyFun( );
c.引用调用
CTask &task=objA;
task.print( );
this 指针:
由于一个类对象调用的成员函数都是同一个代码段,对象调用成员函数时,成员函数需要识别其中的数据成员属于哪个对象,以便对其进行操作。
为解决这一问题,实际上,在每个成员函数中,都隐含了一个this指针,该指针指向正在调用成员函数的对象。这个地址存放在隐含的形参this指针中。故,对成员函数内数据成员的访问都隐含地加上了this指针。
对象的生存期指对象从开始创建到被释放为止的存在时间,对象按生存期的不同分为以下三种:
局部对象:定义在函数体或程序块内,作用域和生命周期都是局部的;
全局对象:定义在某个文件中,作用域为包含该文件的整个程序,生命周期是局部的;
静态对象:分为内部静态对象和外部静态对象,生命期都是全局的,前者作用域为定义它的函数体和程序块内,后者作用域为定义它的文件;
5、类与结构体的区别
默认访问:
类定义中默认访问级别是 private;
结构体定义中默认访问级别是public;
初始化:
类通过构造函数初始化数据成员;
结构体的初始化依靠特定的语法格式;