《面向对象程序设计C++》课件1第3章 类和对象.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《面向对象程序设计C++》课件1第3章 类和对象.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计C+ 面向对象程序设计C+课件1第3章 类和对象 面向 对象 程序设计 课件
- 资源描述:
-
1、2023-11-121 1第第3章章 类和对象类和对象本章学习要点本章学习要点类和对象的概念及其关系类的声明和对象的定义及使用构造函数与析构函数的作用及使用对象数组 对象与指针 对象与const对象的动态创建和释放对象的复制和赋值 对象的移动向函数传递对象字面值常量类图书馆图书借阅管理系统中类的声明和对象的定义2023-11-122 2第第3章章 类和对象类和对象本章学习目标本章学习目标正确理解类、对象及封装的概念熟练掌握类的声明和对象的定义及使用理解构造函数与析构函数的作用及使用掌握对象与指针及const的特点及使用理解并掌握对象的复制和赋值,对象的移动掌握对象的动态创建和释放理解对象作为函
2、数的参数传递的实质掌握基本的基于对象的程序设计与实现2023-11-123 33.1 类的声明和对象的定义类的声明和对象的定义v本节主要是关于类和对象的概念、类的声本节主要是关于类和对象的概念、类的声明格式、对象的定义方法明格式、对象的定义方法 2023-11-124 43.1.1 类和对象的概念及关系类和对象的概念及关系v对象对象 封装了数据及在这些数据之上的操作的封装了数据及在这些数据之上的操作的封装体封装体 v类类 对具有相同属性和操作的一组对象的抽对具有相同属性和操作的一组对象的抽象描述象描述 v类和对象的关系类和对象的关系 类是对象的抽象;对象是对类的实例化类是对象的抽象;对象是对类
3、的实例化2023-11-125 5类和对象的关系类和对象的关系3.1.1 类和对象的概念及关系类和对象的概念及关系2023-11-126 63.1.2 类类的声明的声明class 类名类名public:公用成员公用成员 protected:受保护成员受保护成员 private:私有成员私有成员 ;声明类的一般形式:声明类的一般形式:声明类的关键字声明类的关键字合法标识符合法标识符公用成员限定符公用成员限定符受保护成员限定符受保护成员限定符私有成员限定符私有成员限定符类结束要加分号类结束要加分号2023-11-127 73.1.2 类类的声明的声明【例例3-1】声明一个学生类,要求包括学生的学号
4、、声明一个学生类,要求包括学生的学号、姓名、性别等信息,并且能够显示学生的信息。姓名、性别等信息,并且能够显示学生的信息。2023-11-128 83.1.2 类类的声明的声明class Student /声明学生类声明学生类Studentpublic:/以下部分为公用成员函数以下部分为公用成员函数 void setInfo()cout stuNo stuName stuSex stuAge;void show()cout No.:stuNo endl;cout Name:stuName endl;cout Sex:stuSex endl;cout Age:stuAge endl;privat
5、e:/以下部分为学生类以下部分为学生类Student的私有数据成员的私有数据成员string stuNo;/学号学号 string stuName;/姓名姓名 string stuSex=男男;/性别性别 int stuAge=0;/年龄年龄;/类声明结束,此处必须有分号类声明结束,此处必须有分号2023-11-129 93.1.2 类类的声明的声明1.类的成员分为数据成员和成员函数类的成员分为数据成员和成员函数2.成员的可访问性可分为三类:私有的(成员的可访问性可分为三类:私有的(private)、受保)、受保护的(护的(protected)、公用的()、公用的(public)3.由访问限定
6、符限定它后面的成员的访问属性,直到出现由访问限定符限定它后面的成员的访问属性,直到出现下一个访问限定符或者类的结束为止下一个访问限定符或者类的结束为止4.在声明类时,这三种访问属性的成员的声明次序是任意在声明类时,这三种访问属性的成员的声明次序是任意的,并且在一个类的声明中不一定这三种访问属性全部都的,并且在一个类的声明中不一定这三种访问属性全部都出现,可能只出现两种或一种。出现,可能只出现两种或一种。5.某个成员访问限定符在一个类的声明中也可以出现多次。某个成员访问限定符在一个类的声明中也可以出现多次。2023-11-1210103.1.3 对象的定义对象的定义v声明类之后,再定义对象声明类
7、之后,再定义对象 如:如:Student zhang,wang;或:或:class Student zhang,wang;v在声明类的同时定义对象在声明类的同时定义对象 如:如:class Student zhang,wang;v不出现类名,直接定义对象不出现类名,直接定义对象 如:如:class zhang,wang;声明类时系统并不分配内存单元,而定义对象声明类时系统并不分配内存单元,而定义对象时系统会给每个对象分配内存单元时系统会给每个对象分配内存单元2023-11-1211113.2.1 成员函数的性质成员函数的性质v不属于任何类的函数称为不属于任何类的函数称为普通函数普通函数。v成员
8、函数隶属于某个类成员函数隶属于某个类v成员函数与普通函数的区别成员函数与普通函数的区别 成员函数是属于某个类的成员函数是属于某个类的,是类的一个成员是类的一个成员 成员函数可以指定访问属性成员函数可以指定访问属性 成员函数可以访问本类的任何成员,而普通函成员函数可以访问本类的任何成员,而普通函数只能访问对象的公用成员数只能访问对象的公用成员v对于成员函数,对于成员函数,一般是将需要被类外调用一般是将需要被类外调用的声明为公用的,不需要被类外调用的声的声明为公用的,不需要被类外调用的声明为私有的。明为私有的。2023-11-121212【例例3-4】将将Student类的成员函数改为在类外定义类
9、的成员函数改为在类外定义的形式。的形式。3.2.2 在类外定义成员函数在类外定义成员函数2023-11-121313class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用成员函数 void setInfo();void show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;/学号学号 char stuName20;/姓名姓名 string stuSex=男男;/性别性别 int stuAge=0;/年龄年龄;/类声明结束类声明结束/在类的声明之外定义成员函数在类的声明之外定义成员函数/在类的
10、声明之外定义学生类在类的声明之外定义学生类Student的的setInfo成员函数成员函数void Student:setInfo()cout stuNo stuName stuSex stuAge;2023-11-121414class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用成员函数 void setInfo();void show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;/学号学号 char stuName20;/姓名姓名 string stuSex=男男;/性别性别 int s
11、tuAge=0;/年龄年龄;/类声明结束类声明结束/在类的声明之外定义成员函数在类的声明之外定义成员函数 void Student:show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;cout Age:stuAge endl;2023-11-1215153.2.2 在类外定义成员函数在类外定义成员函数2023-11-1216163.2.3 inline成员函数成员函数vinline函数函数 在编译时将被调用函数的代码直接嵌入在编译时将被调用函数的代码直接嵌入到调用函数处到调用函数处 vinline成员函数就是将类中的成
12、员函数成员函数就是将类中的成员函数声明为内置的声明为内置的 当类中的成员函数是在类内定义时,默当类中的成员函数是在类内定义时,默认该成员函数是认该成员函数是inline成员函数成员函数 如果成员函数定义在类的外部,则在成如果成员函数定义在类的外部,则在成员函数声明或定义前必须要有员函数声明或定义前必须要有inline关键关键字字 2023-11-1217173.2.4 成员函数的存储方式成员函数的存储方式v实例化对象时需要分配内存空间,数据和函实例化对象时需要分配内存空间,数据和函数都需要存储空间数都需要存储空间v同一个类的不同对象的数据是不一样的,因同一个类的不同对象的数据是不一样的,因此要
13、为每个对象的数据成员分配内存单元此要为每个对象的数据成员分配内存单元v同一个类的不同对象的函数是一样的,因此同一个类的不同对象的函数是一样的,因此将同类的所有对象的函数放在一个公共的区将同类的所有对象的函数放在一个公共的区域。域。2023-11-1218183.2.4 成员函数的存储方式成员函数的存储方式【例例3-5】类的对象占用内存空间实验。类的对象占用内存空间实验。#include using namespace std;class Testpublic:void show()coutchar in Test is:cendl;private:char c;int main()Test t
14、est;coutSize of Test is sizeof(test)endl;return 0;2023-11-1219193.2.4 成员函数的存储方式成员函数的存储方式【例【例3-6】相同类的不同对象执行相同成员函数输出相同类的不同对象执行相同成员函数输出不同结果。不同结果。#include using namespace std;class Testpublic:void set(char ch)c=ch;void show()coutchar in Test is:cc=ch;void show(Test*this)coutchar in Test is:c”运算符方便直观的进行,
15、运算符方便直观的进行,“-”称为指向运算符。称为指向运算符。例如:例如:Test test1;test1.set(a);Test*pTest=&test1;test1.show();pTest-show();此处两个语句的执行结此处两个语句的执行结果完全相同,只是采用果完全相同,只是采用了不同的访问对象成员了不同的访问对象成员的形式而已的形式而已。2023-11-1224243.3.3 通过引用访问成员通过引用访问成员v对象的引用和普通变量的引用在本质上是一样对象的引用和普通变量的引用在本质上是一样的的 v通过对象的引用访问对象成员和通过对象访问通过对象的引用访问对象成员和通过对象访问成员形式
16、上是一样的成员形式上是一样的例如:例如:Test test1;test1.set(a);Test&refTest=test1;test1.show();refTest.show();此处两个语句的执行此处两个语句的执行结果完全相同,只是结果完全相同,只是采用了不同的访问对采用了不同的访问对象成员的形式而已象成员的形式而已。class Student/声明声明Student类类型类类型public:/以下部分为公用成员函数以下部分为公用成员函数 void setInfo();void show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;/学号学号 c
17、har stuName20;/姓名姓名 string stuSex=男男;/性别性别 int stuAge=0;/年龄年龄;/类声明结束类声明结束/在类的声明之外定义成员函数在类的声明之外定义成员函数 void Student:show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;cout Age:stuAge endl;2023-11-122525int main()Student stud;stud.show();return 0;2023-11-122626class Student/声明声明Student类类型类
18、类型public:/以下部分为公用成员函数以下部分为公用成员函数 void setInfo();void show();private:/以下部分是私有数据成员以下部分是私有数据成员 int stuNo;/学号学号 char stuName20;/姓名姓名 string stuSex=男男;/性别性别 int stuAge=0;/年龄年龄;/类声明结束类声明结束/在类的声明之外定义成员函数在类的声明之外定义成员函数 void Student:Show()coutNo.:stuNoendl;coutName:stuNameendl;coutSex:stuSexendl;void Student:
19、setInfo()cout stuNo stuName stuSex stuAge;int main()Student stud;stud.setInfo();stud.show();return 0;2023-11-1227273.4.1 构造函数构造函数1、构造函数的任务、构造函数的任务 创建对象时对对象的数据成员初始化创建对象时对对象的数据成员初始化【例【例3-9】构造函数举例构造函数举例2023-11-122828class SalesData /声明图书交易记录类SalesDatapublic:/定义SalesData类的构造函数,构造函数名与类名相同 SalesData()/利用构
20、造函数对数据成员赋初值 bookNo=null;unitsSold=0;revenue=0.0;cout SalesDatas constructor is executed!endl;private:string bookNo;/书号书号 int unitsSold;/销售出的册数销售出的册数 double revenue;/总销售金额总销售金额;/类声明结束类声明结束2023-11-1229293.4.1 构造函数构造函数v 构造函数的特点构造函数的特点(1)构造函数是类的一个特殊的成员函数,构造函数名与)构造函数是类的一个特殊的成员函数,构造函数名与类名相同,且没有返回值类名相同,且没有
21、返回值(2)构造函数可以被重载,一个类可以包含多个构造函数,)构造函数可以被重载,一个类可以包含多个构造函数,不同的构造函数之间在形参数量或形参类型上有所不同。不同的构造函数之间在形参数量或形参类型上有所不同。稍后介绍。稍后介绍。(3)构造函数不需要用户调用,由系统在创建对象时自动)构造函数不需要用户调用,由系统在创建对象时自动调用的调用的(4)构造函数不能声明为)构造函数不能声明为const的。的。(5)构造函数内容一般是初始化数据语句,但也可以是其)构造函数内容一般是初始化数据语句,但也可以是其他的语句他的语句(6)创建对象时肯定会执行一个构造函数)创建对象时肯定会执行一个构造函数2023
22、-11-1230303.4.1 构造函数构造函数v默认构造函数默认构造函数 如果用户自己没有定义构造函数,编译器会隐式地如果用户自己没有定义构造函数,编译器会隐式地提供一个构造函数,称之为合成的默认构造函数,提供一个构造函数,称之为合成的默认构造函数,该构造函数的形参表和函数体皆为空,它按如下规该构造函数的形参表和函数体皆为空,它按如下规则初始化类的数据成员:则初始化类的数据成员:v如果存在类内的初始值,用它来初始化成员,这是如果存在类内的初始值,用它来初始化成员,这是C+11标准中新增的类内初始化。标准中新增的类内初始化。v否则,默认初始化该成员,其初始化规则与普通变否则,默认初始化该成员,
23、其初始化规则与普通变量的默认初始化规则相同。量的默认初始化规则相同。2023-11-1231313.4.1 构造函数构造函数v默认构造函数默认构造函数 合成的默认构造函数只适合非常简单的类,对于大合成的默认构造函数只适合非常简单的类,对于大多数普通的类来说,必须定义它自己的默认构造函多数普通的类来说,必须定义它自己的默认构造函数(该构造函数或者形参表为空,如例数(该构造函数或者形参表为空,如例3-9中的构中的构造函数,或者形参不为空但全部参数都有默认实参造函数,或者形参不为空但全部参数都有默认实参)。)。2023-11-1232323.4.1 构造函数构造函数2、定义自己的构造函数、定义自己的
24、构造函数 class SalesData /声明图书交易记录类SalesDatapublic:SalesData()=default;/无参的默认构造函数 /带1个const string&参数的构造函数 SalesData(const string&No):bookNo(No)/带1个istream&参数的构造函数 SalesData(istream&input);/带3个参数(书号、销售册数、销售价格)的构造函数 SalesData(const string&No,int n,double price):bookNo(No),unitsSold(n),revenue(n*price);/类
25、声明结束类声明结束2023-11-1233333.4.1 构造函数构造函数2、定义自己的构造函数、定义自己的构造函数 int main()SalesData book1;book1.show();cout endl;SalesData book2(1002);book2.show();cout endl;SalesData book3(1003,2,35.0);book3.show();cout bookNo unitsSold price;revenue=unitsSold*price;(此处省略的代码同例3-10)private:string bookNo;/书号 int unitsSol
展开阅读全文