




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲复杂的对象1第一页,共二十四页,编辑于2023年,星期四本讲主要内容类和对象对象数组和对象指针this指针第二页,共二十四页,编辑于2023年,星期四1.类和对象在面向对象程序设计中,对象的类型称为类(class)。类代表了某一批对象的共性和特征。类是对象的抽象。而对象是类的具体实例(instance)。class<自定义类类型名>
{
[private:]
[<私有成员>]
[protected:]
[<私有成员>]
[public:]
[<公有成员>]
};对象的定义
类类型对象1,对象2,…
第三页,共二十四页,编辑于2023年,星期四类设计例题1定义一个类,实现输入10个整数,并能够反序输出。classmycla{private: intarr[10];public: voidinput() { for(inti=0;i<10;i++)cin>>arr[i]; } voidpr() { for(inti=9;i>=0;i--)cout<<arr[i]<<""; }};参考答案第四页,共二十四页,编辑于2023年,星期四类设计例题2定义一个复数类complex,实现复数加、减和乘的功能。classcomplex{private:doubler;doublei;public:voidincom();complexaddcom(complexc2);complexsubcom(complexc2);complexmulcom(complexc2)voidoutcom();};参考答案第五页,共二十四页,编辑于2023年,星期四练习1.在C++语言中,数据封装要解决的问题是
A)数据的规范化
B)便于数据转换
C)避免数据丢失
D)防止不同模块之间数据的非法访问
答案:D2.一个函数功能不太复杂但要求被频繁调用,应选用
A.内联函数
B.重载函数
C.递归函数
D.嵌套函数答案:A第六页,共二十四页,编辑于2023年,星期四2.对象数组和对象指针数组不仅可以由简单的变量组成,也可以由对象组成。对象数组的使用方法有普通的对象方法相同。定义一般形式类名对象名[参数];第七页,共二十四页,编辑于2023年,星期四对象指针指向对象的指针简称对象指针对象空间的起始地址就是对象的指针定义一般形式类名*对象指针名;对象动态的建立与释放对象动态的建立类*ptpt=new类动态的释放deletept;第八页,共二十四页,编辑于2023年,星期四程序中常常用对象指针作为函数的参数好处:实现传地址调用,可以在被调用函数中改变调用函数的参数对象值,实现函数之间的信息传递;使用对象指针作为参数仅传递实参的地址给形参,而不进行副本的拷贝,这样可以减少开销,提高运行效率。第九页,共二十四页,编辑于2023年,星期四对象指针例题3设计一个类,具有x,y私有数据成员,设计方法实现对象之间的拷贝。classcla{private: intx;inty;public:voidincome(){ cin>>x>>y;}voidcopy(cla*p){ x=p->x;y=p->y;}voidpr(){ cout<<x<<""<<y<<endl;}};参考答案第十页,共二十四页,编辑于2023年,星期四写出以下程序段的输出结果#include<iostream.h>#include<string.h>classperson{ private: intno; charname[20]; public: voidsetvalue(intno,charname[]) { this->no=no; strcpy(this->name,name); } intgetno(){returnno;} char*getname(){returnname;}};voidmain() {person*p; p=newperson; p->setvalue(1,"zhang"); cout<<p->getno()<<":"<<(*p).getname()<<endl; }答案:1:zhang第十一页,共二十四页,编辑于2023年,星期四指向对象数组的指针指向对象数组的指针格式类名(*指针名)[(大小)]…如A(*pa)[10];pa是一个指向对象数组的指针名它指向的对象数组是一个一维数组每个元素是类A的一个对象第十二页,共二十四页,编辑于2023年,星期四对象指针数组对象指针数组的元素是指向对象的指针,它要求所有的数组元素都是指向相同类的对象的指针。格式:类名*(数组名)[大小]…对象指针数组与一般数组相似,只是数组的元素不同。数组元素为指向对象的指针时,该数组为对象指针数组。第十三页,共二十四页,编辑于2023年,星期四例题4定义一个类cla,具有x,y两个数据成员,有输入和输出功能,在主函数中,定义若干个对象,定义一个对象指针数组,指向它们,利用对象指针数组来实现所有对象的输出功能。第十四页,共二十四页,编辑于2023年,星期四练习1.下列关于对象数组的描述中,()是错误的。(A)对象数组的数组名是一个常量指针
(B)对象数组的下标从0开始
(C)对象数组的每一个元素都是相同的对象
(D)对象数组只能赋初值,不能再程序中赋值答案:D2.下列关于指向二维对象数组的指针,定义正确的是()。
(A).cla(*pt)[3][4]
(B).cla(*pt)[3](obj)
(C).cla*pt[3][4]
(D).cla(*pt)[3,4]
答案:A第十五页,共二十四页,编辑于2023年,星期四3.this指针C++中,同一类的各个对象都有自己的数据成员的存储空间,而系统不会为每个类的对象建立成员函数的副本。类的成员函数可以被各个对象调用。问题:Tclassobject1,objectp;object1.print();objectp->print();成员函数print()是怎样分清给哪个对象执行的呢?第十六页,共二十四页,编辑于2023年,星期四thisC++为成员函数提供一个称为this的指针,this在所有成员函数调用里作为一个隐含参数传送给成员函数,所以,我们常称成员函数拥有this指针。当一个对象调用类的成员函数时,this指针就指向该对象,this是一个隐含的指针,它不能被显式说明;this是个局部变量,局限于某一个对象。this指针通常不显式使用,需要时可以用(*this)来表示给成员对象。this指针主要在运算符重载、自引用等场合。当一个对象调用类的成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数。第十七页,共二十四页,编辑于2023年,星期四this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子:
voidDate::setMonth(intmn)
{
month=mn;//这三句是等价的
this->month=mn;
(*this).month=mn;
}第十八页,共二十四页,编辑于2023年,星期四例如:类cla中有一个成员函数intcla::fun(){returnx*y;}C++把它处理为intcla::fun(cla*this){returnthis->x*this->y;}当对象obj调用该成员函数时,实际上是用下面的方式调用的obj.fun(&obj);将对象obj的地址传给形this指针,然后按this的指向去引用成员函数的。注意:this指针通常不显式定义!下面的语句不能出现在程序中,这里是为了便于理解。intcla::fun(cla*this)obj.fun(&obj);第十九页,共二十四页,编辑于2023年,星期四this指针练习(j205.cpp)看程序,写结果。#include<iostream.h>classaa{private:inta,b;public: voidsetaa() {a=0;b=0;}voidsetaa1(intx,inty) {a=x;b=y;} intreturna() {returna;} intreturnb() {returnb;}
voidmain(){aaa1,a2;a1.setaa();a2.setaa1(3,4);a1.copy(a2);cout<<a1.returna()-a2.returna()<<endl;cout<<a1.returnb()+a2.returnb()<<endl;}voidcopy(aa&z);};voidaa::copy(aa&z){ if(this==&z) return; *this=z;}08第二十页,共二十四页,编辑于2023年,星期四j206.cpp例题5利用this指针,判断两个对象是否指针同一内存空间。classcla{public: intfun1(cla&obj) { if(this==&obj) return1; else return0; } };第二十一页,共二十四页,编辑于2023年,星期四练习1.关于this指针的说法正确的是()。
(A)
this指针必须显示的说明(B)定义一个类后,this指针就指向该类
(C)成员函数拥有this指针
(D)this指针属于对象的答案:C2.this指针能出现在()地方。
(A)成员函数内部(B)成员函数形式参数(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公大楼保洁承包合同
- 技术开发合同模板简明
- 院企合作科研合同标准模板
- 工业品交易合同模板转让合作协议
- 银行软件服务合同
- 小学生冬季滑冰知识
- 药理学第二十章 抗心绞痛药课件
- 微特电机在无人机飞行控制系统的应用考核试卷
- 搪瓷材料在实验室环境的应用考核试卷
- 地下综合管廊工程光缆敷设技术考核试卷
- 新入职消防安全培训
- 医保信息系统数据安全管理制度
- 第18课排序计算有方法(教案)四年级全一册信息技术人教版
- 统编版五年级语文下册1古诗三首《四时田园杂兴(其三十一)》课件
- 酒店2024年保安部工作计划024酒店工作计划
- 规模化猪场生物安全
- 2025年春节后复产复工方案及安全技术措施
- 维修基金使用合同范例
- c语言课件教学下载
- 2024购房合同购房定金合同
- 高速公路施工现场安全管理制度
评论
0/150
提交评论