版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、要点:要点: C+类的定义格式类的定义格式 类的数据成员及成员函数的定义方法类的数据成员及成员函数的定义方法 对象的定义与使用对象的定义与使用 构造函数及析构函数构造函数及析构函数 指向对象的指针及引用的概念指向对象的指针及引用的概念 静态成员函数的应用静态成员函数的应用 类的友元函数类的友元函数重点内容:重点内容: 类的定义、对象的定义及使用。类的定义、对象的定义及使用。 第九章第九章 类和对象类和对象 一、类的定义一、类的定义1. 类的定义类的定义类一般分为两部分。一是说明部分,主类一般分为两部分。一是说明部分,主要用于声明类中的成员;二是操作部分,要用于声明类中的成员;二是操作部分,主要
2、用来对成员函数进行定义。主要用来对成员函数进行定义。一、类的定义一、类的定义1类定义的格式类定义的格式类定义的基本格式如下:类定义的基本格式如下:class 类名类名 private: 私有数据成员或函数成员私有数据成员或函数成员 protected: 保护数据成员或函数成员保护数据成员或函数成员 public: 公有数据成员或函数成员公有数据成员或函数成员;一、类的定义一、类的定义如如: class student private: int number; char name10; int age; char sex; public: void display();一、类的定义一、类的定义2
3、类的成员函数类的成员函数 类的成员函数主要是实现类的操作。成员函数类的成员函数主要是实现类的操作。成员函数的定义通常在类定义体之外给出,其基本格式如的定义通常在类定义体之外给出,其基本格式如下:下:返回值类型返回值类型 类名:成员函数名(参数表)类名:成员函数名(参数表) 函数体函数体一、类的定义一、类的定义例:例: 编写一个求长方形周长及面积的类。编写一个求长方形周长及面积的类。class rectangle private: int x,y; public: void set(int a,int b); int perimeter(); int area(); ;一、类的定义一、类的定义v
4、oid rectangle:set(int a,int b) x=a; y=b;int rectangle:perimeter() int m; m=(x+y)*2; return m;一、类的定义一、类的定义int rectangle:area() int s; s=x*y; return s;一、类的定义一、类的定义3类的内联函数类的内联函数 如果将成员函数定义在类体内,则称为内联函如果将成员函数定义在类体内,则称为内联函数。内联函数是数。内联函数是C+比较特殊的函数,它直接在比较特殊的函数,它直接在调用处插入函数体中的代码,而不进行一般的调调用处插入函数体中的代码,而不进行一般的调用操作
5、,因此,内联函数速度比较快,类的内联用操作,因此,内联函数速度比较快,类的内联函数有两种定义方式:隐式定义及显式定义。函数有两种定义方式:隐式定义及显式定义。一、类的定义一、类的定义1)隐式定义)隐式定义 隐式定义是直接在类的里面编写成员函数体的隐式定义是直接在类的里面编写成员函数体的代码。代码。 如如class add private: int x,y,s; public: 一、类的定义一、类的定义 void sum(int a,int b) x=a,y=b; s=x*2+y; void display() couts=sendl; ;一、类的定义一、类的定义2)显式定义)显式定义 显式定义
6、是将内联函数的内容放在类的外面,显式定义是将内联函数的内容放在类的外面,但必须使用内联函数关键字但必须使用内联函数关键字inline说明,其格式说明,其格式如下:如下: inline 返回值类型返回值类型 函数名(参数表)函数名(参数表)一、类的定义一、类的定义如:如:class add private: int x,y,s; public: void sum(int a,int b); void display();;一、类的定义一、类的定义 inline void add:sum(int a,int b) x=a,y=b; s=x*2+y; inline void add:display(
7、) couts=sendl; 一、类的定义一、类的定义4设置成员函数的初始值设置成员函数的初始值 类的成员函数在定义时,可以给其参数设置初类的成员函数在定义时,可以给其参数设置初始值,当调用该成员函数时,如果主调函数没有始值,当调用该成员函数时,如果主调函数没有传递参数给成员函数,则成员函数使用默认值进传递参数给成员函数,则成员函数使用默认值进行运算。行运算。如上面的类修改如下:如上面的类修改如下: inline void add:sum(int a=4,int b=5)二、对象的定义与使用二、对象的定义与使用 类是一种数据类型,它本身不能够直接类是一种数据类型,它本身不能够直接使用,必须通过
8、定义变量来实现其定义的使用,必须通过定义变量来实现其定义的功能。用类的类型定义的变量称为对象,功能。用类的类型定义的变量称为对象,对象是类的实例。对象是类的实例。 二、对象的定义与使用二、对象的定义与使用1对象的定义对象的定义 定义对象可以有两种方法。一种是在定义类的定义对象可以有两种方法。一种是在定义类的同时,定义对象;另一种是先定义类,再定义对同时,定义对象;另一种是先定义类,再定义对象,其的结构如下:象,其的结构如下:;(1)在定义类的同时定义对象)在定义类的同时定义对象 参看参看P119(2)先定义类的结构,再定义对象)先定义类的结构,再定义对象 参看参看P120二、对象的定义与使用二
9、、对象的定义与使用2对象的使用对象的使用 由于类具有很多数据成员和成员函数,用类定由于类具有很多数据成员和成员函数,用类定义对象以后,对象就具有类的所有性质,因此可义对象以后,对象就具有类的所有性质,因此可以通过对象引用这些数据成员或成员函数,其格以通过对象引用这些数据成员或成员函数,其格式如下:式如下:.或或.(参数表(参数表)二、对象的定义与使用二、对象的定义与使用#includeclass add private: int x,y,s; public: void sum(int a,int b); void display();二、对象的定义与使用二、对象的定义与使用void add:s
10、um(int a,int b) x=a,y=b; s=x*2+y; void add:display() couts=sendl; 二、对象的定义与使用二、对象的定义与使用void main() add m; m.sum (8,10); m.display (); 在使用对象时,要注意只能引用公有成员,否则在使用对象时,要注意只能引用公有成员,否则将会出错。将会出错。练习:练习:利用类编写一个求圆周长和面积的程序利用类编写一个求圆周长和面积的程序#includeclass circle private: int r; public: void init(int x); void show();
11、 ; inline void circle:init(int x) r=x; inline void circle:show() cout“peri=“2*3.1416*rendl; cout“area=“r*r*3.1416endl; void main() circle rad; rad.init(10); rad.show(); 三、构造函数和析构函数三、构造函数和析构函数 在在C+中,各种变量在内存中都分配有相应的中,各种变量在内存中都分配有相应的存储空间,不同的数据类型分配的存储空间是不存储空间,不同的数据类型分配的存储空间是不同的。当声明一个类的对象时,编译程序需要为同的。当声明一
12、个类的对象时,编译程序需要为对象分配存储空间进行必要的初始化,即对数据对象分配存储空间进行必要的初始化,即对数据成员进行设置,这些工作可以由构造函数来完成。成员进行设置,这些工作可以由构造函数来完成。同样,当某个对象使用结束时,通过撤消可以回同样,当某个对象使用结束时,通过撤消可以回收其存储空间,这一工作可以由析构函数来完成。收其存储空间,这一工作可以由析构函数来完成。三、构造函数和析构函数三、构造函数和析构函数1构造函数构造函数构造函数是一种特殊的成员函数,它有以下几个方面的特点:构造函数是一种特殊的成员函数,它有以下几个方面的特点:(1)构造函数的名字必须与类名相同。)构造函数的名字必须与
13、类名相同。(2)构造函数可以有任意类型的参数,但不能有返回值,)构造函数可以有任意类型的参数,但不能有返回值,也不能说明为也不能说明为void类型。类型。(3)构造函数一般被声明为公有函数,程序不能直接调用)构造函数一般被声明为公有函数,程序不能直接调用构造函数,构造函数是在创建对象时由系统自动调用。构造函数,构造函数是在创建对象时由系统自动调用。(4)可以利用构造函数进行初始化。)可以利用构造函数进行初始化。三、构造函数和析构函数三、构造函数和析构函数P123例例9.4练习:练习: 利用构造函数,求正方型的面积及周长利用构造函数,求正方型的面积及周长#includeclass square
14、private: int x,t,s; public: square(int a) x=a; void perimeter(); void area(); void display(); void square:perimeter() t=x*4; void square:area() s=x*x; void square:display() coutperimeter=tendl; coutarea=sendl; void main() square mm(10); mm. perimeter(); mm.area(); mm.display();三、构造函数和析构函数三、构造函数和析构函数
15、2 析构函数析构函数 当一个对象完成使命时,为了减少对象占用当一个对象完成使命时,为了减少对象占用内存空间,可以将对象删除。在删除对象之前,内存空间,可以将对象删除。在删除对象之前,一般使用析构函数释放对象占用的内存空间。析一般使用析构函数释放对象占用的内存空间。析构函数具有以下特点:构函数具有以下特点: (1)析构函数的名字与类名相同,在类名前面加)析构函数的名字与类名相同,在类名前面加上一个波浪号上一个波浪号“”。(2)析构函数没有参数,不能指定类型说明。)析构函数没有参数,不能指定类型说明。(3)在一个类中只能有一个析构函数。)在一个类中只能有一个析构函数。P124 例例9.5#incl
16、udeclass fact private: int n,i,s; public: void set(int a);void show() coutn!=sendl;fact()couts;lfksdflendl;void fact:set(int a) s=1; n=a; for(i=1;i=n;i+) s*=i;void main() int n; coutn; fact m,t; m.set(n); m.show(); t.set(n+1); t.show();四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用类的对象跟普通变量一样,当创建一个对象时,类的对象跟普通变量一样,当
17、创建一个对象时,系统为对象分配一定的存储空间,可以使用指针系统为对象分配一定的存储空间,可以使用指针变量指向对象的起始地址。变量指向对象的起始地址。1 对象指针的定义对象指针的定义对象指针的定义和一般变量一样,其格式如下:对象指针的定义和一般变量一样,其格式如下:类名类名 * 对象指针变量名对象指针变量名四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用class circle private: int r; public: void set(int x); void display();四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用circle st1,st2; ci
18、rcle * p1, *p2; p1=&st1; p2=&st2;四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用2对象指针的使用对象指针的使用 定义对象指针变量的目的就是想利用对象指针变定义对象指针变量的目的就是想利用对象指针变量处理对象的数据成员,访问方式如下:量处理对象的数据成员,访问方式如下:对象指针对象指针-数据成员名数据成员名或者或者对象指针对象指针-成员函数名(参数表)成员函数名(参数表)其中,其中,-是一个指向运算符。是一个指向运算符。四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用例例9.6 利用对象指针访问对象成员。利用对象指针访问对
19、象成员。#includeclass add private: int x,y,z; public:四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用 void inis(int a,int b) x=a; y=b; z=(x+y)*x; void show() coutz=zinis(8,12); p-show();四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用3this指针指针 C+提供了一个特殊的对象指针提供了一个特殊的对象指针this指针,指针,它是隐含于每个类的成员函数中的特殊指针,用它是隐含于每个类的成员函数中的特殊指针,用来指向正在被某个成员函数操作的对象。
20、来指向正在被某个成员函数操作的对象。四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用 当一个对象调用成员函数时,编译程序先将对当一个对象调用成员函数时,编译程序先将对象的地址赋给象的地址赋给this指针,然后调用成员函数,成指针,然后调用成员函数,成员函数对成员数据进行操作时,隐含使用了员函数对成员数据进行操作时,隐含使用了this指针。如果不同的对象调用同一个成员函数,系指针。如果不同的对象调用同一个成员函数,系统将根据成员函数的统将根据成员函数的this指针指的对象来确定应指针指的对象来确定应该引用哪一个对象的成员。该引用哪一个对象的成员。四、指向对象的指针和对象的引用四、指向
21、对象的指针和对象的引用例例9.7 this指针的使用。指针的使用。#includeclass add private: int x,y,z; public: void inst(); void display();void add:inst() this-x=15; this-y=20; z=x+y;void add:display() coutz=zendl;void main() add m; m.inst(); m.display();四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用4对象的引用对象的引用 在在C+中,可以为定义的变量起一个中,可以为定义的变量起一个“别名别名
22、”,使用这个使用这个“别名别名”就如同使用变量本身,这种给就如同使用变量本身,这种给变量起变量起“别名别名”的方式称为引用。引用运算符为的方式称为引用。引用运算符为“&”。四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用说明:说明:(1)“&”符号在赋值号的左边,表示是符号在赋值号的左边,表示是“引用引用”,如果在赋值号的右边,则是如果在赋值号的右边,则是“取址符取址符”。(2)一个变量一旦有了别名,这个别名就不能作)一个变量一旦有了别名,这个别名就不能作为别的变量的别名。为别的变量的别名。(3)别名不另占存储空间,别名只是给一个已有)别名不另占存储空间,别名只是给
23、一个已有的变量起另一个名称而已。的变量起另一个名称而已。四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用引用的定义格式:引用的定义格式:数据类型数据类型 & 引用名引用名=变量名;变量名;如如int x,y;int &px=x;int &py=y;则则px就是变量就是变量x的的“引用引用”,py就是变量就是变量y的的“引引用用”。对象的引用与普通变量的引用一样,其格式如下:对象的引用与普通变量的引用一样,其格式如下:类名类名 &引用名引用名=对象名;对象名;四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用例例9.8 引用的使用。引用的使用
24、。#includeclass sum private: int x,y,z; public:四、指向对象的指针和对象的引用四、指向对象的指针和对象的引用public: void inst(int a,int b); void display();void sum:inst(int a,int b) x=a; y=b; z=x+y;void sum:display() coutz= zx;x; sum m; sum m; sum &t=m; sum &t=m; m.inst(x,y m.inst(x,y);); m.display m.display();(); t.displa
25、y t.display();(); 五、类的静态成员五、类的静态成员 在类定义中,它的成员可以用关键字在类定义中,它的成员可以用关键字static声明,声明,用用static声明的成员称为静态成员。声明的成员称为静态成员。类的静态成员包括静态数据成员和静态成员函数。类的静态成员包括静态数据成员和静态成员函数。 五、类的静态成员五、类的静态成员1静态数据成员静态数据成员用用static声明的类的数据成员称为类的静态数声明的类的数据成员称为类的静态数据成员。类的静态数据成员与普通数据成员不同据成员。类的静态数据成员与普通数据成员不同的是,当用具有静态数据成员的类定义多个对象的是,当用具有静态数据成
26、员的类定义多个对象时,这些对象的静态成员共用同一内存单元,如时,这些对象的静态成员共用同一内存单元,如果某个对象改变了静态成员的值,则其他对象的果某个对象改变了静态成员的值,则其他对象的静态成员也跟着改变。静态成员也跟着改变。五、类的静态成员五、类的静态成员类静态数据成员的定义格式:类静态数据成员的定义格式:static 说明:说明:(1)类的静态数据成员是静态存储,必须对它进)类的静态数据成员是静态存储,必须对它进行初始化,其格式如下:行初始化,其格式如下:数据类型数据类型 类名:静态数据成员名类名:静态数据成员名=值值(2)访问类的静态数据成员,采用如下格式:)访问类的静态数据成员,采用如
27、下格式: 类名:静态数据成员名类名:静态数据成员名五、类的静态成员五、类的静态成员例例9.10 静态成员函数的使用。静态成员函数的使用。#includeclass add private: static int a; int b,c; public: static void set(add m,int x,int y);五、类的静态成员五、类的静态成员int add:a=0; /静态数据成员初始化静态数据成员初始化void add:set(add m,int x,int y) a=x; m.b=y; m.c=a*m.b+a; couta= aendl; coutm.b= m.bendl; co
28、utm.c= m.cendl; 五、类的静态成员五、类的静态成员void main() add t1,t2; cout对象对象t1各成员的值:各成员的值:endl; add:set(t1,8,10); cout对象对象t2各成员的值:各成员的值:endl; add:set(t2,15,18);练习:练习: 利用类的静态数据成员求下列数据之和利用类的静态数据成员求下列数据之和 21,43,15,26,80,17,6,10#includeclass array private: int i; static int sum; public: array(int x,int n); void disp
29、lay();void array:display() coutsum=sumendl;void main() int x=21,43,15,26,80,17,6,10; array s(x,8); s.display();int array:sum=0;array:array(int x,int n) for(i=0;in;i+) sum+=xi;练习:利用类的静态数据成员求数组的最小练习:利用类的静态数据成员求数组的最小值,并将数组最小值与第一个元素交换。值,并将数组最小值与第一个元素交换。六、类的友元六、类的友元 类具有数据的封装和数据的隐藏,使得类的数类具有数据的封装和数据的隐藏,使得类
30、的数据成员不能够被类以外的函数所访问。但是在不据成员不能够被类以外的函数所访问。但是在不影响私有数据安全的情况下,如何使得类外部的影响私有数据安全的情况下,如何使得类外部的函数能够访问类中的私有成员。函数能够访问类中的私有成员。C+提供了提供了“友友元元”这个概念,就是为了解决这些问题。这个概念,就是为了解决这些问题。 六、类的友元六、类的友元1友元函数友元函数 一个类的友元函数是定义在类外部的一个函数,一个类的友元函数是定义在类外部的一个函数,它不是类的成员函数,但可以访问类的私有成员它不是类的成员函数,但可以访问类的私有成员和公有成员。在类定义时,必须声明友元函数。和公有成员。在类定义时,必须声明友元函数。其格式如下:其格式如下:friend 返回值类型返回值类型 友元函数名(友元函数名() 六、类的友元六、类的友元例例9.11 友元函数的使用。友元函数的使用。#includeclass add private: int a,b,c;六、类的友元六、类的友元 public: void inst(int x,int y); friend int sum(add &m); /友元的声明友元的声明;void add:inst(int x,int y) a=x; b=y;int sum(add &m) m.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湘潭市雨湖区政务服务中心(窗口人员)招聘笔试参考题库及答案详解
- 2026年济宁市任城区医疗系统事业编人员招聘笔试备考题库及答案详解
- 2026年苏州市平江区工会人员招聘考试参考题库及答案详解
- 高压供用电合同参考文本
- 基金管理公司特定多个客户资产管理合同内容与格式准则
- 2026年江苏省医疗系统事业编人员招聘笔试参考试题及答案详解
- 2021年语文版五年级语文上册期中考试题(完美版)
- 2026年衡阳市石鼓区工会人员招聘考试参考题库及答案详解
- 暑假趣事400字四年级作文【10篇】
- 2021国家开放大学电大本科《设施园艺学》期末试题及答案(试卷号:1329)
- 校外培训机构风险分级分类管控方案
- 2026湖北黄石市阳新县事业单位统一招聘107人笔试备考题库及答案详解
- 2026下半年上海杨浦区卫健系统事业单位公开招聘93名专业技术人员笔试参考题库及答案详解
- 2026下半年四川成都市大邑县教育系统招聘编外教师教师146人笔试题库附答案详解(轻巧夺冠)
- 最详细对比-高中数学课程标准2025修订版与2020版
- 《机械制图》电子教材
- 输变电工程多维立体参考价(2025年版)
- PE室外给水管道安装施工组织设计
- 《雅思阅读》课件
- 心外科临床小讲课
- 计算机基础教程电子版
评论
0/150
提交评论