类的基础概念_第1页
类的基础概念_第2页
类的基础概念_第3页
类的基础概念_第4页
类的基础概念_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

类的基础概念第一页,共三十六页,2022年,8月28日-2-本章内容安排类型类的定义使用对象构造析构函数第二页,共三十六页,2022年,8月28日-3-类型分类和抽象是人类认知世界的基本方法。人类将所见到的事物按照特征进行分类,以抽象的概念加以描述,同时建立类别之间的关系。如北美野人是一种哺乳动物,哺乳动物是动物的一种,而动物是生物的一种。C++中,可以使用基本类型(内置类型),还可以创建新的自定义类型类型:对分类的抽象描述;对象:对现实世界中特定事物的模拟;面向对象编程:使用程序中的对象模拟现实世界的编程模式,对象是包含数据和功能的实体。第三页,共三十六页,2022年,8月28日-4-类型的要素声明某种类型的变量时,隐含了三个方面的信息变量占用的内存大小可存储的信息可对变量执行的操作unsignedshortheight,width;占用内存大小:2个字节。可存储的信息:0~65535之间的整数。可执行的操作:可以对height和width执行加、减等运算第四页,共三十六页,2022年,8月28日-5-本章内容安排类型类的定义使用对象构造与析构函数第五页,共三十六页,2022年,8月28日类和对象C++通过定义类来创建新类型。类是对一类事物的抽象描述(类别)。通过类可以创建具体的事物(对象),就像定义一个变量;类是创建对象的模板。类是捆绑在一起的变量和函数的集合。-6-第六页,共三十六页,2022年,8月28日类和对象对象的概念对象是构成世界的一个独立单位,如火车、大学等。复杂的对象可以由简单的对象组成,例如火车站对象又包含售票处、行李房、信号灯、站台、铁轨和通信设施等对象。描述对象物理特征:对象的物理特征;行为特征:对象能做什么,如火车能加速、刹车等。-7-第七页,共三十六页,2022年,8月28日封装对象是将物理特征和功能组合在一起而形成的封装实体。通过封装,允许其它程序使用对象,而无需知道对象的内部工作原理,只需要知道它能干什么。-8-第八页,共三十六页,2022年,8月28日类的构成类的2个构成部分变量:成员变量或数据成员,描述对象的物理特征,如Tricycle类中包含车轮大小、最高速度等成员变量。函数:成员函数或方法,决定对象能做什么,函数使用或修改成员变量,如Tricycle类中包含pedal()、brake()等。-9-第九页,共三十六页,2022年,8月28日-10-类的定义classTricycle{public:

unsignedintspeed; unsignedintwheelSize; voidpedal(); voidbrake();};通过class关键词,创建一个名为Tricycle的类,包含2

个成员变量(speed和wheelSize)和2个成员函数。类的定义只是创建了新类型,并没有创建对象。第十页,共三十六页,2022年,8月28日-11-创建对象通过新建的类型创建对象:Tricyclewichita;创建对象时,将Tricycle作为模型,编译器根据该模型为对象分配内存。wichita占用8个字节(speed和wheelSize各4个字节),编译器不在对象中为函数预留空间,各对象共享函数。Tricycle是类型(三轮车的抽象概念),而wichita是具体的三轮车对象,对象是类的实例。第十一页,共三十六页,2022年,8月28日-12-本章内容安排类型类的定义使用对象构造与析构函数第十二页,共三十六页,2022年,8月28日创建对象创建对象后,可以通过.操纵符访问它的成员函数和成员变量(公有)Tricyclewichita;wichita.speed=6;wichita.pedal();-13-通过对象和.操作符,只能访问public部分的成员函数和成员变量。第十三页,共三十六页,2022年,8月28日缺省访问权限是私有的classTricycle{

unsignedintspeed; unsignedintwheelSize; voidpedal(); voidbrake();};wichita.speed=6;wichita.pedal();-14-缺省的访问权限为private,不能通过对象访问。X第十四页,共三十六页,2022年,8月28日通常将数据成员声明为私有classTricycle{private: unsignedintspeed; unsignedintwheelSize;public: voidpedal(); voidbrake();};wichita.speed=6;wichita.pedal();-15-X√通常将数据成员声明为私有,再声明公有的成员函数(存取器),通过存取器间接访问数据。保护内部数据;隔离了内部实现,当修改内部实现,无需修改外部使用。第十五页,共三十六页,2022年,8月28日实现成员函数类中声明的每个成员函数,都必须要进行定义。类中成员函数的定义与普通函数类似,但需要指定类作用域前缀,表示为特定某个类的成员函数。voidTricycle::pedal(){ std::cout<<“Pedalingtrike\n”;}-16-Tricycle::表明pedal是Tricycle类中的pedal方法。第十六页,共三十六页,2022年,8月28日-17-对象定义时的内存分配Tricyclet1,t2;t1.setSpeed(2);t1.pedal();t2.setSpeed(3);每个对象有各自的数据成员,取值各不相同,成员函数代码只有1份。……2t1t23speedspeed……pedal……brake……setSpeedgetSpeed第十七页,共三十六页,2022年,8月28日-18-完整的Tricycle类示例#include<iostream>classTricycle{private: intspeed;public: voidpedal(); voidbrake();

intgetSpeed(); voidsetSpeed(intnewSpeed);};speed定义为私有数据成员。getSpeed用于读取speed成员,

setSpeed用于设置speed成员,作为类的存取器。第十八页,共三十六页,2022年,8月28日-19-完整的Tricycle类示例intTricycle::getSpeed(){ returnspeed;}voidTricycle::setSpeed(intnewSpeed){

if(newSpeed>=0) { speed=newSpeed; }}将speed设置为私有成员,通过存取器控制访问,可以防止非法或破坏性修改。将speed声明为公有成员,无法实施类似的保护。第十九页,共三十六页,2022年,8月28日-20-完整的Tricycle类示例voidTricycle::pedal(){ setSpeed(speed+1); std::cout<<"pedaling...Speed:"<<speed<<std::endl;}voidTricycle::brake(){ setSpeed(speed-1); std::cout<<"Braking...Speed:"<<speed<<std::endl;}第二十页,共三十六页,2022年,8月28日-21-完整的Tricycle类示例intmain(){

Tricyclewichita; wichita.setSpeed(0);

wichita.pedal(); wichita.pedal(); wichita.brake(); wichita.brake(); wichita.brake(); return0;}面向对象编程模式,通过类创建对象,对象间相互作用,模拟现实世界。面向对象编程的主要工作:定义类、创建对象、调用对象方法。第二十一页,共三十六页,2022年,8月28日-22-本章内容安排类型类的定义使用对象构造与析构函数第二十二页,共三十六页,2022年,8月28日内置类型变量的创建与初始化内置类型变量的初始化intweight=7;内置类型变量的赋值intweight;weight=7;-23-第二十三页,共三十六页,2022年,8月28日构造函数初始化对象类中有一种特殊的函数(构造函数),用于创建对象时,完成对数据成员的初始化。函数名称和类名称完全相同;函数没有返回类型,void也没有;可以有参数或没有参数。-24-构造函数是由系统自动调用,每当我们创建对象时,系统就会自动调用相应的构造函数。第二十四页,共三十六页,2022年,8月28日构造函数Tricycle类的构造函数Tricycle::Tricycle(intinitialSpeed){ setSpeed(initialSpeed);}-25-第二十五页,共三十六页,2022年,8月28日析构函数如果声明了构造函数,往往也需要声明析构函数,析构函数用于在对象消亡时执行清理工作并释放分配给对象的内存。析构函数名称为类名之前加~;析构函数没有返回类型;析构函数不能传递任何参数。-26-析构函数也由系统自动调用,每当对象消亡时,系统就会自动调用相应的析构函数。第二十六页,共三十六页,2022年,8月28日析构函数Tricycle类的析构函数Tricycle::~Tricycle(){ //nothing}-27-第二十七页,共三十六页,2022年,8月28日默认构造函数默认构造函数特指没有参数的构造函数Tricycle::Tricycle(){ setSpeed(0);}不同版本的构造函数形成重载的关系,编译器根据我们定义对象的方式调用相应的构造函数。-28-第二十八页,共三十六页,2022年,8月28日构造函数的匹配Tricyclewichita(5);Tricyclewichita;-29-调用含1个参数的构造函数,设置初始速度为5。调用默认构造函数,设置初始速度为0。第二十九页,共三十六页,2022年,8月28日自动生成的默认构造函数如果没有声明任何构造函数,编译器将自动生成1个默认构造函数,但不执行任何操作(数据成员仍然没有被初始化)Tricycle::Tricycle(){ //nothing}如果没有定义析构函数,编译器也会自动生成1个函数体为空的析构函数。-30-第三十页,共三十六页,2022年,8月28日补充说明默认构造函数是没有参数的构造函数,可以自己定义,也可以由编译器自动生成。只要写了某种构造函数,编译器就不再自动提供默认构造函数,如果此时需要默认构造函数,必须自己定义。-31-良好编程习惯:尽量自己编写缺省构造函数,而不是使用系统提供的缺省构造函数。第三十一页,共三十六页,2022年,8月28日-32-加入构造函数的Tricycle类#include<iostream>classTricycle{public:

Tricycle(intinitialSpeed); Tricycle(); ~Tricycle(); voidpedal(); voidbrake(); intgetSpeed(); voidsetSpeed(intnewSpeed);private: intspeed;};多个版本的构造函数形成重载的关系。析构函数不能重载。第三十二页,共三十六页,2022年,8月28日-33-加入构造函数的Tricycle类Tricycle::Tricycle(intinitialSpeed){ setSpeed(initialSpeed); std::cout<<"Tricyclecreated...\n";}Tricycle::Tricycle(){ setSpeed(0); std::cout<<"Tricycledefaultcreated...\n";}Tricycle::~Tricycle(){ std::cout<<"Tricycledestroyed\n";}第三十三页,共三十六页,2022年,8月28日-34-加入构造函数的Tricycle类intTricycle::ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论