C++程序设计第7章类和对象的基础.ppt
《C++程序设计第7章类和对象的基础.ppt》由会员分享,可在线阅读,更多相关《C++程序设计第7章类和对象的基础.ppt(62页珍藏版)》请在三一办公上搜索。
1、第7章 类和对象的基础,本章内容提要,类与对象的定义 对象的初始化 成员函数的特性 静态成员 友元 类的作用域与对象的生存期,一、类与对象的定义,什么是类?类是一种新的数据类型。类是逻辑相关的函数和数据的封装,是对所处理的问题的抽象描述,所以,类是实现抽象类型的工具。类(Class):是一种用户定义的类型,它包括定义的数据和其对应的操作(函数)。使用对象将数据和操作进行封装(Encapsulation)。,什么是对象?,类实例化后便生成对象。对象(Object):含有数据(对象的属性Attribute)又含有对数据的操作代码(Method)的一个逻辑封装体。属性:描述对象特征的数据。方法:对属
2、性的操作。面向对象编程利用对象进行程序设计,1.类的定义,类的定义一般分为说明部分和实现部分。说明部分:类中的成员数据成员成员函数的说明实现部分成员函数的具体定义例如:定义一个汽车类型号、外壳、车轮等(数据成员)启动、加速和停止等(成员函数),类的定义格式:,class public:private:protected:;,例:坐标点类,问题:将坐标点与相应操作封装成类,class TPoint public:void Setxy(int a,int b);/说明在类体内,定义在类体外 void Move(int,int);/函数原型声明,参数名可给可不给出 void Print();int
3、Getx();int Gety();private:int x,y;/数据成员;,例:坐标点类(续上),问题:将坐标点与相应操作封装成类,void TPoint:Setxy(int a,int b)x=a;y=b;void TPoint:move(int a,int b)x=x+a;y=y+b;void TPoint:Print();coutx=Getx()y=Gety();int TPoint:Getx()return x;int TPoint:Gety()return y;,在类体外定义成员函数的一般格式为:函数类型 类名:成员函数(参数表)其中,作用域运算符“:”是用来标识成员函数是属于
4、哪个类的,“类名”是成员函数所属类的名字。若在函数前加关键词inline,则成为内联成员函数。若函数较短,可以在类内定义,也称作内联成员函数。,例:坐标点类(内联函数形式),问题:将说明部分和实现部分都在类体内定义。,class TPoint/类名public:/声明其后为公有成员 void Setxy(int a,int b)x=a;y=b;void Move(int a,int b)x=x+a;y=y+b;void Print()coutx=Getx()y=Gety();int Getx()return x;int Gety()return y;private:int x,y;/数据成员;
5、,2.对象的定义与使用,对象的定义格式:说明:是定义对象所属类的名字。可有多个对象名,用逗号分隔。例如:TPoint p1,p2;/定义TPoint类型的对象p1和p2。TPoint*p=/定义一个TPoint类型的对象数组。,2.对象的定义与使用,对象中数据成员和成员函数的表示方式1:.()例如:p1.x,p1.y,p1.Setxy(2,3)对象中数据成员和成员函数的表示方式2:-或者(*).-()或者(*).()例如:p-x,p-y,p-Getxy(int a,int b)或者(*p).x,(*p).y,(*p).Getxy(int a,int b),例7.1,问题:对象的定义和成员函数的
6、调用。,#include#include Tpoint.hvoid main()TPoint p1,p2;TPoint*p=,该程序的运行结果为x=1y=2x=3y=4x=5y=6x=11y=14x=6y=8x=11y=14,对象定义的实质,定义一个类,就相当于定义了一种类型,它并不会接受或存储具体的值,只作为一个样板,只有被实例化生成对象以后,系统才为对象分配存储空间。为节省内存,在创建对象时,只为每个对象的数据成员分配内存,而成员函数只是一次性存放在静态存储区中,为所有的对象共享。例如:TPoint p1,p2;,二、对象的初始化,在类的定义中,无法用表达式初始化数据成员,因此,在声明一个
7、对象时,对象的初始状态是不确定的,需要初始化。对象初始化可以使用:构造函数析构函数复制构造函数,1.构造函数,构造函数是一种特殊的成员函数,它主要用来为对象分配空间,给他的数据成员赋值(初始化)并执行对象的其他内部管理操作。说明:构造函数的名字必须与类的名字相同,并且构造函数无返回值,不允许定义构造函数的返回值类型,包括void类型。但允许有参数。构造函数是成员函数,函数体可写在类体内,也可写在类体外。构造函数可以重载。,注意:构造函数在对象创建时由系统自动调用,这是它与类的普通成员函数之间的最大区别。,构造函数的定义格式如下::,例7.2,问题:构造函数的定义举例。,#include cla
8、ss Tpointpublic:Tpoint(int m,int n)x=m;y=n;/定义构造函数int Getx()return x;int Gety()return y;private:int x,y;void main()Tpoint a(10,20);Tpoint b(15,25);couta.Getx(),a.Gety()endl;coutb.Getx(),b.Gety()endl;,该程序的运行结果如下:10,2015,25,2.析构函数,析构函数也是类中的特殊成员函数,与类名字相象,在前加一个波浪号“”。它没有参数,也没有返回值,在一个类中只能有一个析构函数。析构函数执行与构造
9、函数相反的操作。通常用于释放分配给对象的存储空间,当程序超出类对象的作用域时,或者当对一个类指针使用运算符delete时,将自动执行析构函数。说明:和构造函数一样,如果不定义析构函数,编译程序将提供一个缺省的析构函数。对大多数类来说,缺省的析构函数就能满足要求,如果在一个对象完成其操作之前还需要做一些内部处理,则应显式的定义析构函数。,析构函数的定义格式如下::,注意:析构函数仅能有一个,不能重载。,例7.3,问题:构造函数和析构函数举例。,#include class Tpointpublic:Tpoint(int m,int n)x=m;y=n;/定义构造函数Tpoint();int Ge
10、tx()return x;int Gety()return y;private:int x,y;Tpoint:Tpoint()coutDestructor called.n;void main()Tpoint a(10,20);Tpoint b(15,25);couta.Getx(),a.Gety()endl;coutb.Getx(),b.Gety()endl;,该程序的运行结果如下:10,2015,25Destructor called.Destructor called.,类的构造函数和析构函数注意:,类的构造函数在程序中为对象创建时分配系统资源提供了初始化的方法;析构函数为对象撤销时释放
11、系统资源提供了方法。无论用户是否定义构造函数和析构函数,它们都默认存在。只要定义了新类,类的对象在创建和撤销时,构造函数和析构函数将会被调用。,3.复制构造函数,已有变量可以初始化另一个变量:int a=5;int b=a;同样,已有对象也可以初始化另一个对象。复制构造函数是一种特殊的成员函数,其功能是用一个已经初始化过了的对象去初始化另一个新创建的对象。复制构造函数的定义格式如下::(&)注意:它只有一个参数,是对某个对象的引用。,例7.4,问题:调用复制构造函数的例子。,#include class Tpointpublic:Tpoint(int m,int n);/定义构造函数 Tpoi
12、nt();/定义析构函数 Tpoint(Tpoint,例7.4,问题:调用复制构造函数的例子。,void main()Tpoint a(10,20);Tpoint b(15,25);Tpoint c(a);couta.Getx(),a.Gety()endl;coutb.Getx(),b.Gety()endl;coutc.Getx(),c.Gety()endl;,该程序的运行结果为:Call constructor.Call constructor.Copy constructor.10,2015,2510,20Destructor called.Destructor called.Destru
13、ctor called.,7.3成员函数的特性,成员函数除了说明和定义之外,还有一些相关的特性:内联函数和外联函数 成员函数重载 设置参数的缺省值,1.内联函数和外联函数,类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。两者的区别:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数则是在编译时,将调用表达式用内联函数体来替换。这样在使用时去掉了调用环节,提高运行速度。缺点:如果内联函数代码过大,则目标程序会加大。,
14、例7.5,问题:内联函数与外联函数实例。,#include class Apublic:A(int m,int n)/内联函数,定义在类体内x=m;y=n;int Getx()return x;/内联函数,定义在类体内int Gety()return y;/内联函数,定义在类体内int sumxy();/内联函数,定义在类体外,但进行了转化int area();/外联函数,定义在类体外private:int x,y;inline int A:sumxy()/由外联函数转化为内联函数return Getx()+Gety();int A:area()return Getx()*Gety();voi
15、d main()A s(10,20);coutsum=s.sumxy(),area=s.area()endl;,在使用内联函数时,应注意以下几点:(1)在内联函数内不允许用循环语句和开关语句。(2)内联函数的定义必须出现在内联函数第一次被调用之前。(3)内联函数无法进行递归调用。,2.成员函数重载,在前面介绍的成员函数中,除了析构函数不能重载外,其他的成员函数都可以进行重载。但重载必须满足以下条件之一:参数个数不同。参数类型不同。当参数个数相同时,参数类型至少有一个不同。仅有返回值不同的函数是不能重载的。,例7.6,问题:成员函数重载实例。,#includeclass Bpublic:B(in
16、t a)x=a+1;y=a;B(int a,int b)x=a;y=b;int add();int add(int a);int add(int a,int b);int Getx()return x;int Gety()return y;private:int x,y;int B:add()return x+y;int B:add(int a)x=y=a;return x+y;int B:add(int a,int b)x=a;y=b;return x+y;,例7.6,问题:成员函数重载实例。,void main()B m(5,7),n(6);coutm=m.Getx(),m.Gety()e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 对象 基础

链接地址:https://www.31ppt.com/p-6153992.html