




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第四章类和对象,4.1类及其实例化,4.1.1类的定义,2,1定义类,3,4,2 定义成员函数 成员函数可以在类体内定义 也可以在类体外定义 在类体内定义的成员函数自动为内联函数 在类体外定义成员函数时须使用域名限定 在类体外定义成员函数时,在类体内必须声明 在类体外定义成员函数如何定义为内联函数?,5,:称为域限定符,在类体外定义函数时,表示函数是类的成员函数。此时函数若要定义为内联,则加inline关键字,类内定义的函数默认为内联函数。,6,inline void point : setxy(int a,int b) x=a; y=b; 有如上定义形式,可以了解哪些信息,7,3 数据成
2、员赋值 使用赋值语句,可为数据成员赋值 在类体内可以定义成员函数和数据成员 类体内任何的操作语句 必须放在某个成员函数的函数体内,8,3 数据成员赋值,9,4.1.2使用类的对象 类的对象的定义类似变量的定义 int x; int *p1=,10,4.1.2使用类的对象 类的对象的定义类似变量的定义 point A,B; point *p=,通过对象使用对象的成员:对象名.成员,通过对象的引用使用对象的成员:引用名.成员,通过指向对象的指针使用对象的成员: 指针-成员,11,12,通过对象使用对象的成员:对象名.成员,通过对象的引用使用对象的成员:引用名.成员,通过指向对象的指针使用对象的成员
3、: 指针-成员,13,能否如上方式使用?,14,15,4.1.2使用类的对象 数据成员使用规律: 1,类的成员函数可以直接使用类的数据成员 2,类外的函数不能使用类的私有成员 3,类外的函数可以访问类的公有成员函数 4,对象间的区别在于其属性值不同 5,未限定成员权限类型时,默认为private 6,结构体中未限定成员权限时默认public 详见P72(1)(2)(3)(4)及表4.1,16,例4.3,17,18,4.1.3数据封装 对象间利用公有成员函数进行通信。 公用成员函数是对象的接口。 (1)内存中不仅存储对象的数据,也存储代码 (2)可产生多个对象的副本 C+对对象的数据成员和成员函
4、数的访问是通过访问权限来限制的。,19,4.1.3数据封装 对象间利用公有成员函数进行通信。 公用成员函数是对象的接口。 main函数或其他函数的函数体中使用类对象时,只能通过类对象使用类的公有成员,不能通过类对象使用类的私有成员。 在类的成员函数函数体内 可以直接使用类的私有成员。,20,在类体外使用公有成员时,必须通过类的对象,指向类对象的指针或对象的引用 不能同对类的对象,指针,引用使用类的私有成员,21,4.2构造函数 4.2.1默认构造函数 类中定义的与类同名的函数为构造函数。 构造函数不能限定函数类型。 若类的定义中未定义构造函数,则C+编译器会自动产生一个不带参数的函数体为空的构
5、造函数称为 默认构造函数, 若有point类中未定义构造函数,请说明该类的默认构造函数形式: point(),此时不对对象进行初始化。,22,该类的构造函数是什么形式的?,23,类的构造函数何时调用?,point A;,对应的构造函数调用形式?,point ();,此时类体中若没有定义构造函数, 则系统会自动产生一个默认构造函数 形式为:point() ,此时产生的A对象中存放什么数据?,24,若类的定义中未定义构造函数,则C+编译器会自动产生一个不带参数的函数体为空的构造函数称为 默认构造函数 一旦类中定义了构造函数, 则不再产生默认构造函数。,25,此时程序有何问题?,26,4.2.2定义
6、构造函数 1,构造函数的定义方法 构造函数在产生对象是自动执行, 一般用于初始化对象。 point A(1,2); 产生point(1,2);形式的构造函数调用 该函数功能是将1,2存入A对象中 该函数point如何定义才能实现此功能?,27,4.2.2定义构造函数 1,构造函数的定义方法,28,4.2.2定义构造函数 1,构造函数的定义方法,29,void main() point A; point B(1,2); ,30,31,总结: 对象产生则自动调用相应的构造函数 产生一个对象调用一次构造函数 定义数组时产生多个对象,调用多次构造函数对象的内存产生,则自动调用构造函数,32,产生对象则
7、调用构造函数,构造函数不可使用 对象名.成员名 形式使用,33,4.2.3 构造函数和new运算 运算符new用于创建生存期可控的对象,并返回该对象的指针。,new运算会产生对象,会调用构造函数,34,4.2.3 构造函数和new运算 用new动态分配内时,产生类的对象,自动调用构造函数。 根据是否对对象进行初始化,来判断调用什么样的构造函数(有参,无参),35,4.2.4 构造函数的默认参数 在定义或声明函数时对函数的形参进行了初始化,则调用函数时,若未给出对应的实参,则参数自动取初始化的值。这称为函数的默认参数。 int fun(int x=0,int y=0)coutxy; fun();
8、 fun(1); fun(1,2);,36,4.2.4 构造函数的默认参数,37,能否如下定义构造函数?为什么?,该类中有几个构造函数? 这些构造函数可否同时存在?,38,构造函数的默认参数定义形式,39,4.2.5复制构造函数 利用一个现有对象初始化一个新对象时系统自动调用复制构造函数。若未定义时,系统会使用一个默认的复制构造函数。 复制构造函数又称为拷贝构造函数。 定义复制构造函数的固定格式: 类名(类名 y=b; ,65,4.6 this指针 类的成员函数有一个隐藏的参数,是一个系统定义的this指针,用于指向调用成员函数的对象。 当一个成员函数被调用时,系统自动传递一个this指针给成
9、员函数,在函数体内所使用的成员都是由该指针指向的。,void point: set(int a,int b,point* this) this-x=a; this-y=b; 若有p.set(1,2); 则函数调用时this自动指向p对象,66,4.7 一个类的对象作为另一类的成员 类一旦定义好之后,类成为一种新的数据类型 类可以定义出对象(类似变量) 可以作为其它类的成员,67,68,69,70,71,4.8 类和对象的性质 4.8.1 对象的性质 a,同类对象可以相互赋值 point A,B(1,2); A=B;,72,4.8 类和对象的性质 4.8.1 对象的性质 a,同类对象可以相互赋值
10、 b,可以使用对象数组。 point A10; A0 A1 Ai ,73,4.8 类和对象的性质 4.8.1 对象的性质 a,同类对象可以相互赋值 b,可以使用对象数组。 c,可使用指向对象的指针 Point *p; Point A(1,2); P=,74,4.8 类和对象的性质 4.8.1 对象的性质 a,同类对象可以相互赋值 b,可以使用对象数组。 c,可使用指向对象的指针 d,对象可以作函数参数 e,注意使用对象作参数, 对象指针作参数, 对象的引用作参数 f,一个对象可以作另一个类的成员。,75,4.8.2 类的性质 1,使用类的权限 a,类本身的成员函数可以使用类的所有成员 clas
11、s A int x,y; public: void fun1() /此函数体内可以使用 /类A的所有成员 void fun2() /此函数体内可以使用 /类A的所有成员 ;,76,1,使用类的权限 b,类的对象只能访问公有成员 在类外使用 对象名.成员名形式 class A int x,y; public: void fun1()。 void fun2()。 ; A a; 在类外可以使用a.fun1(),不可以使用a.x,77,1,使用类的权限 c,非类的成员函数不能使用类的成员,要使用必须通过类的对象,引用或指针来使用,class A int x,y; public: void fun1()
12、。 void fun2()。 ; void fun3() /此函数内不能直接使用A的成员 /可以通过A的对象使用 A a; a.fun1(); ,78,1,使用类的权限 d,A类可以包含另一个B类的对象,而该A类中要使B类的成员也必须通过B类的对象,引用或指针来使用,79,2,不完全的类声明 类定义后不分配内存, 只有产生类的对象时才进行内存分配。 类必须在其成员使用之前先进行声明。 有时需要使用类定义指针,而不使用其成员,此时可以使用不完全类声明。 class A; /此称为类的不完全声明 A p; /不可产生A类的对象 A *p; /可以定义A类的指针,80,2,不完全的类声明 class
13、 A; /此称为类的不完全声明 A p; /不可产生A类的对象 。 class A 。;/类的完整定义 先使用,但不可实例化,然后再给出完整定义 不可定义对象,81,3, 空类 定义类时只给出 class 类名; 类体为空,此时称为空类。 4, 类作用域 在类的作用域内声明的成员只能在类的作用域内使用,若要在类的作用域外使用则需要通过 对象名.成员 形式,并考虑成员的访问权限,82,4, 类的作用域 定义类时的称为类的作用域 若成员函数在类的作用域外定义,则需要在成员函数定义前加上类的域限定符,则类的作用域也包含成员函数的作用域。 类的作用域内定义的成员只能在作用域内使用 可以利用 类名:成员
14、名 形式来限定类的成员 注意:类中默认控制权限是private的 结构体中默认控制权限是public的,83,4, 类的作用域,84,4.9 面向对象的标记图 4.9.1类和对象的UML标记图 UML标记图表示类:长式、短式,类名,85,给出该类的类图,86,UML标记图表示类:长式、短式,point,87,4.9.2 对象的结构与连接 对象结构:对象之间的分类关系和组成关系 分类关系又叫继承关系 组成关系又叫聚合关系 统称为关联关系 对象连接:对象间的静态关系通过对象属性之间的连接反映的,称为实例连接 对象行为之间的动态关系是通过对象行为之间的依赖关系表现的,称之为消息连接。 消息连接和实例
15、连接统称为连接,88,4.9.2 对象的结构与连接 1,分类关系及其表示 C+中的分类结构就是继承结构(泛化关系) 三角形表示,89,4.9.2 对象的结构与连接 2,对象组成关系及其表示 组成关系表示整体与部分的关系。 a,聚集 空心菱形表示 独立存在 b,组合 实心菱形表示 同生同灭,90,4.9.2 对象的结构与连接 3,实例连接及其表示 反映对象间的静态关系,驾驶员,汽车,驾驶,老师,学生,教学,91,4.9.2 对象的结构与连接 4,消息连接及其表示 描述对象间的动态关系,92,4.9.3 使用实例 4.9.4 对象、类和消息 4.10 编译指令 1,嵌入指令 2,宏定义 3,条件编
16、译 4,defined操作符,93,复习前节,什么是构造函数? 什么时候调用构造函数? 构造函数是不是类的成员函数? 一个类可以有几个构造函数? 构造函数有没有参数? 复制构造函数格式是什么样的? 什么时候调用复制构造函数?,94,什么是析构函数? 什么时候调用析构函数? 析构函数是不是类的成员函数? 一个类可以有几个析构函数? 析构函数有没有参数?,95,真题,3在C+中,封装是借助什么达到的( ) A结构 B类 C数组 D函数 5.类的析构函数是对一个对象进行以下哪种操作时自动调用的?( ) A.建立 B撤消 C赋值 D引用 6.下列不是描述类的成员函数的是( ) A.构造函数 B析构函数
17、 C友元函数 D拷贝构造函数,96,真题,8.假定AB为一个类,则执行AB x;语句时将自动调用该类的( ) A.有参构造函数 B无参构造函数 C拷贝构造函数 D赋值构造函数 9.假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为( ) A.x.a Bx.a() Cx-a Dx-a(),97,真题,10.对于任一个类,用户所能定义的构造函数的个数至多为( ) A.0 B1 C2 D任意个 11对象的四大基本特性是多态性、继承性、_抽象_和封装性。 12为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为_priva
18、te_。,98,真题,6.C+允许在结构中定义函数,这些函数称为( ) A.静态函数 B.构造函数 C.析构函数 D.成员函数 12.一个类拥有多个构造函数,则这些构造函数间为( ) A.重载关系 B.重复关系 C.拷贝关系 D.无关系,99,真题,13.对于拷贝构造函数point:point(point& p),下列说明正确的是( ) A.该函数只能访问P的私有成员 B.该函数不能访问P的公有成员 C.该函数可以访问P的私有和公有成员 D.该函数不能访问P的成员 20.下列哪个不是面向对象的关键要素( ) A.抽象性B.结构性 C.封装性D.多态性,100,真题,29.UML中对象之间的静态
19、关系是通过对象属性之间的连接反映的,称之为_。 31.C+类的构造函数名与_名称一样,且没有返回值。 32.C+规定,当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针,该指针被称为_指针。,101,真题,34.C+语言中的“聚合”隐含了两种实现方式,一种是_,另一种是用一个类的对象作为一种广义的数据类型来定义整体对象的一个属性。 7.C+类中定义的成员默认访问属性为() A.public B.private C.protected D.friend,102,真题,13.下列访问成员的方式哪个是正确的() A.对象名.对象成员名 B.对象指针名.对象
20、成员名 C.对象名对象成员名 D.类名对象成员名 14.对类A,复制构造函数的原型是() A.A:A(constA&);B.A:A(constA*); C.A:A(constA); D.A:A();,103,真题,18.使用string.h库操纵字符串时,将两个字符串连接成一个字符串的函数是() A.strlen() B.strcap() C.strcat() D.strcmp() 20.不同对象调用同名函数,但导致完全不同行为的现象称为() A.抽象 B.封装 C.继承 D.多态性,104,真题,25.在C+标准库中,用_类来表示复数。 28.能提供封装的C+关键字是_。 29.在C+的类声
21、明中,用public关键字声明的类成员的访问权限是_。 31.C+类中的_函数在对象的生存期结束时被自动调用。,105,真题,34.在C+中,创建派生类对象时,总是先从_的初始化开始的。 6.在定义类成员时,为产生封装性,则需使用哪个关键字( ) A.public B.publish C.protected D.private,106,真题,13.类的私有成员可在何处被访问( ) A.本类的成员函数中 B.本类及子类的成员函数中 C.通过对象名在任何位置 D.不可访问 14.类的构造函数在以下什么情况下会被自动调用( ) A.定义成员函数时 B.定义对象时 C.定义数据成员时 D.定义友元函数
22、时,107,真题,15.下列关于析构函数描述正确的是( ) A.可以重载 B.函数体中必须有delete语句 C.返回类型必须是void类型 D.不能指定返回类型 26.写出声明一个复数对象的语句,并使该对象被初始化为2.2+1.3i,此声明语句是_。 30.类和其它数据类型不同的是,组成这种类型的不仅可以有数据,还可以有对数据进行操作的_。,108,真题,32.对于类Point而言,其析构函数的定义原型为_。 33.对象成员构造函数的调用顺序取决于这些对象在类中说明的顺序,与它们在成员初始化列表中给出的顺序_。 35.与操作对象的数据类型相互独立的算法称为_。,109,真题,4如没有使用private关键字定义类的数据成员,则默认为( ) Aprivate Bpublic Cprotected Dfriend,110,真题,11类的私有成员可在何处访问( ) A通过子类的对象访问 B本类及子类的成员函数中 C通过该类对象访问 D本类的成员函数中,111,真题,12如果没有为一个类定义任何构造函数的情况下,下列描述正确的是( ) A编译器总是自动创建一个不带
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届山东省枣庄市名校数学七上期末调研模拟试题含解析
- 重庆市西南大学附属中学2026届七年级数学第一学期期末教学质量检测模拟试题含解析
- 教育机构外教上岗前的文化适应与教学技能训练
- 2026届河南省洛阳市第23中学九年级数学第一学期期末考试试题含解析
- 2025买卖二手轿车合同
- 邮储银行吉林市昌邑区2025秋招笔试法律专练及答案
- 邮储银行丽水市云和县2025秋招半英文面试题库及高分答案
- 中国银行泉州市惠安县2025秋招笔试数量关系题专练及答案
- 中国银行马鞍山市博望区2025秋招笔试管理营销专练及答案
- 工商银行安庆市桐城市2025秋招笔试经济学专练及答案
- 公证在绿色金融中的应用-洞察阐释
- 2025年中考历史总复习《中国历史》八年级上册知识要点汇编
- 工程带班合同协议
- 电动工具智能制造工艺-全面剖析
- 《小米智能家居》课件
- 广西壮族自治区贵港市平南县2024-2025学年九年级上学期11月期中物理试题(含答案)
- 第三单元《小数除法》(单元测试)-2024-2025学年五年级上册数学人教版
- 高中化学鲁科版必修第一册第一章认识化学科学第二节研究物质性质的方法和程序课时练习
- 露天煤矿有毒有害气体防治研究
- 医保飞行检查培训课件
- 2023年云南省昆明市盘龙区中考语文二模试卷(含答案)
评论
0/150
提交评论