[工学]VC类与对象

上传人:豆浆 文档编号:55337716 上传时间:2018-09-27 格式:PPT 页数:65 大小:208KB
返回 下载 相关 举报
[工学]VC类与对象_第1页
第1页 / 共65页
[工学]VC类与对象_第2页
第2页 / 共65页
[工学]VC类与对象_第3页
第3页 / 共65页
[工学]VC类与对象_第4页
第4页 / 共65页
[工学]VC类与对象_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《[工学]VC类与对象》由会员分享,可在线阅读,更多相关《[工学]VC类与对象(65页珍藏版)》请在金锄头文库上搜索。

1、2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,1,第4章 类与对象,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,2,本章主要内容:,类的定义与使用 类的数据成员和成员函数 类成员的访问控制方法 类的实现和对象的创建 访问类成员的方法 构造函数与析构函数 复制构造函数及深复制与浅复制 类作用域 静态成员 类的友元 常对象,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,3,4.1 类,类是对具有相同属性(数据)和行为(操作)的一组对象的抽象。 面向对象程序设计的核心任务是类的确定和对象的创建,而

2、不是将各个具体的对象逐一进行描述。 忽略各具体对象的非本质特征,抽象出本质特征与共性,然后形成类的概念,对象是类的实例。从语法分析,类也是一种数据类型,即用户自定义的数据类型,而一个一个具体的对象可以视为属于这一数据类型的一个变量。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,4,1. 类的定义,类是对具有相同属性和行为的一组对象的抽象与统一描述;类的定义包括行为和属性两个部分; 属性以数据表示,行为通过函数实现。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,5,C+类定义的格式:,class 类名 public:公有数据

3、成员和成员函数;protected:保护数据成员和成员函数;private: 私有数据成员和成员函数; ;各成员函数的实现;,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,6,class Student /定义学生类Student public: /声明类成员 void Getinfo(char* pname,char* pid,char Sex,int a,double s);void modify(float s);void display(); private: char* name;char* id;char sex;int age;double sc

4、ore; ; /类定义以分号结束,类定义举例,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,7,类定义和使用时应注意:,类的定义中不能对数据成员进行初始化。公有部分是类对外的接口,一般应先说明公有部分 类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员。类中的数据成员可以是C+语法规定的任意数据类型,但不能用存储类型auto、register或extern进行修饰。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,8,注意事项(续),类的成员可以是其他类的对象,但不能以类自身的对象作

5、为本类的成员,而类自身的指针和引用可以作为类的成员。类定义必须以分号“;”结束。在C语言中,结构体只有数据成员,而C+的结构体不仅有数据成员,而且有成员函数及访问权限控制。类与结构体的区别:没有明确指定类成员的访问权限时,C+结构体的成员是公有的,而类的成员是私有的。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,9,2 访问控制,类的访问属性有: Public Protected Private各种访问方式的功能如下表,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,10, 类成员访问控制表,2018年9月27日6时57分,面

6、向对象程序设计与Visual C+6.0教程,11,类的成员函数是实现对封装的数据进行操作的惟一途径,是现实类的行为属性的成员。一般将成员函数声明为函数原型,在类外具体实现成员函数。如果成员函数已经在类中定义,则无须在类外实现。类中定义的成员函数自动成为内联函数。,4.2 成员函数,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,12,1. 成员函数的定义,返回值类型 类名:成员函数名(参数表) 函数体 ,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,13,2. 内联成员函数,在类中实现的成员函数自动成为内联函数; 内联成员函数

7、可以减少函数调用开销,提高程序的执行效率; 内联成员函数增加了程序代码的长度; 一般将调用频繁且代码少的成员函数定义为内联成员函数; 若内联成员函数在类外实现,需要以inline限定。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,14,4.3 对象,类描述了一类问题的共同属性和行为,对象是类的实例或实体。类与对象的关系,如同C+基本数据类型和该类型的变量之间的关系。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,15,1. 对象的定义,对象的定义格式如下:,类名 对象名1,对象名2,对象名n;,2018年9月27日6时57分

8、,面向对象程序设计与Visual C+6.0教程,16,必须在定义了类之后,才可以定义类的对象;类定义仅提供该类的类型定义。仅仅定义了类,系统并不会分配存储空间,只有定义了对象后,编译系统才会在内存中预留空间。,定义对象应注意,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,17,声明了类及其对象以后,就可以访问对象的公有成员(包括数据成员和成员函数)。对象成员的访问包括:圆点访问形式指针访问形式,2. 类成员的访问,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,18,(1) 圆点访问形式,对象名.公有成员,2018年9月27日

9、6时57分,面向对象程序设计与Visual C+6.0教程,19,(2) 指针访问形式,形式一:对象指针变量名-公有成员形式二:(*对象指针变量名).公有成员,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,20,New 运算符介绍,本章例4-7程序中出现了New运算符; New运算符用于动态内存分配,在后续章节中有专门介绍; New 运算符使用形式:指针所指向的数据类型应与new 运算符后的数据类型相同,若申请成功则返回分配单元的首地址给指针变量,否则返回空指针值(即0)给指针变量。例如:,(1) 指针变量=new 数据类型;(2) 指针变量=new 数据类型

10、(初始值);(3) 指针变量=new 数据类型元素个数;,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,21,New 运算符举例,int *p1;double *p2;p1=new int(12);p2=new double 100; 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1; 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,22,对象是类的实例,在创建了对象以后,编译系统将给对

11、象分配存储空间。 不同对象的区别主要表现在两个方面:对象名:即对象的标识符(外在区别);对象属性:即数据成员的值,(内在区别) 对象在定义的时需要初始化。 对象生命期结束时要进行清理工作。C+中对象的创建与初始化、对象生命期结束时的清理工作,分别由构造函数和析构函数完成。,4.4 构造函数与析构函数,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,23,构造函数的功能是在定义对象时由编译系统自动调用来创建对象并初始化对象。构造函数的函数名与类名相同。其定义格式如下:,1. 构造函数,类名:类名(参数表) 函数语句 ,2018年9月27日6时57分,面向对象程序设

12、计与Visual C+6.0教程,24,构造函数的函数名与类名相同;构造函数可以有任意类型的参数,但没有函数返回值类型;构造函数一般被定义为公有成员;构造函数在创建对象时由编译系统自动调用;构造函数只能一次性地影响对象的数据成员初值。,构造函数的特殊性质:,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,25,如果类中没有定义构造函数,系统将自动生成一个默认形式的构造函数,用于创建对象,默认构造函数形式:,默认构造函数,类名:类名(),2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,26,使用构造函数时应注意:,构造函数是特殊的成

13、员函数,函数体可写在类中,也可写在类外;若构造函数没有参数,则称为无参构造函数;若构造函数带有参数,则称为带参数构造函数;构造函数可以重载;每个类都必须有一个构造函数。如果程序没有显式定义构造函数,编译系统将自动生成一个默认形式的构造函数。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,27,2. 析构函数,析构函数不能有参数,也不能重载。 定义格式如下:,类名:类名() 函数语句 ,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,28,析构函数的自动调用,除对象生存期结束时自动调用外,在以下两种情况下析构函数会被调用:如果一个

14、对象被定义在一个函数体内,则当这个函数结束时。若一个对象是使用new运算符被动态创建的,在使用delete运算符释放它时。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,29,默认析构函数,若没有显式定义析构函数,则系统自动生成一个默认形式的析构函数。系统自动生成的默认构造函数形式如下:,类名:类名(),2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,30,3. 复制构造函数,复制构造函数也是一种特殊的成员函数; 功能是用一个已知的对象初始化一个被创建 的同类新对象; 复制构造函数的参数是本类对象的引用; C+为每一个类定义了一

15、个默认的复制构造函数; 可以根据需要定义自己的复制构造函数,从而实现同类对象之间数据成员的值传递。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,31,复制构造函数的定义格式,class 类名 public:类名(参数表); /构造函数类名(const 类名 类名:类名(const 类名 &对象名) 函数语句 ,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,32,复制构造函数的调用,以下三种情况下由编译系统自动调用: 声明语句中用类的一个已知对象初始化该类的另一个对象时;当对象作为一个函数实参传递给函数的形参时,需要将实参对象去初始化形参对象时,需要调用复制构造函数; 当对象是函数的返回值时,由于需要生成一个临时对象作为函数返回结果,系统需要将临时对象的值初始化另一个对象,需要调用复制构造函数。,2018年9月27日6时57分,面向对象程序设计与Visual C+6.0教程,33,复制构造函数的特点:,复制构造函数名与类名相同,并且没有返回值类型;复制构造函数可写在类中,也可以写在类外;复制构造函数有且仅有一个参数,即是同类对象的引用;如果没有显式定义复制构造函数,系统自动生成一个默认形式的复制构造函数。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号