




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对象的指针、this指针、const、new和delete63 练习题 1指向对象的指针与指向对象成员的指针有何不同? 2指向成员函数的指针和指向一般函数的指针有何区别? 3对象指针作函数参数与对象作函数参数有何不同? 4对象引用作函数参数与对象指针作函数参数有何区别? 5什么是this指针?它有何作用? 6什么是对象数组?它如何定义?如何赋值? 7。指向对象数组的指针如何定义?如何赋值? 8什么是指针数组?什么是对象指针数组?它们是如何定义的?它们又将如何被赋值? 9。带参数的main()的形式如何?main()有哪些参数?各表示什么意思? 10如何定义一个常量? 11使用const修饰符定义常指针时,const位置有何影响?举例说明,如何定义一个常量指针? 12如何定义常引用? 13,什么是类型适应?举例说明在什么情况下会出现类型适应。 14常成员函数有何特点?在什么情况下需要定义常成员函数? l 5常数据成员的初始化如何实现? l 6如何对子对象进行初始化? 17运算符new和delete的功能是什么?它们可以用来创建动态对象和删除动态对象吗? 18使用new和delete创建和删除动态数组的格式如何?19在例617中,程序执行下列语句 20C十十中类型的自动隐式转换有哪些规则? 21构造函数都具有类型转换函数的功能吗? 22什么是转换函数?定义时应注意哪些问题?6.4一、选择填空1已知一个类A。(C)是指向类A成员函数的指针。假设类有3个公有成员: void f1(int),void f2(int)和int a。 AA*p; B. int A:*pc&A:a; C. void A:*pa(); DA*pp;2运算符一*的功能是( )。 A用来表示指向对象指针对指向类成员指针的操作 B用来表示对象对指向类成员指针的操作 C用来表示指向对象指针对类成员的操作 D用来表示对象类成员的操作3已知fl(int)是类A的公有成员函数,p是指向成员函数f1( )的指针,采用 ( )是正确的。 Apf1; BpA:f1; C. pA:f1(); Dpfl();4已知:P是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给 m赋值为5,( )是正确的。 AA1P5; BA1一P5; CA1.*p5; D*A1p5;5已知类A中一个成员函数说明如下所示。 void Set(A&a); 其中,A&a的含意是( )。 A指向类A的指针为a B将a的地址值赋给变量Set c. a是类A的对象引用,用来作函数Set()的形参 D. 变量A与a按位与作为函数Set()的参数6下列关于对象数组的描述中,( )是错误的。 A对象数组的下标是从o开始的 B对象数组的数组名是一个常量指针 C对象数组的每个元素是同一个类的对象 D对象数组只能赋初值,而不能被赋值7下列定义中,( )是定义指向数组的指针P。 A int*p5; B int(*p)5; C (int *)p5 Dint*p;8下列说明中 Const char * Ptr; ptr应该是( )。 A指向字符常量的指针 B指向字符的常量指针 C指向字符串常量的指针 D指向字符串的常量指针9已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中 是正确的。 A void print()const ; B const void Print( ); C void const print( ); D void print (const);10关于new运算符的下列描述中,( )是错的。 A它可以用来动态创建对象和对象数组 B使用它创建的对象或对象数组,可以使用运算符delete删除 C使用它创建对象时要调用构造函数 D使用它创建对象数组时必须指定初始值11关于delete运算符的下列描述中,( )是错的。 A.它必须用于new返回的指针 B它也适用于空指针 C对一个指针可以使用多次该运算符 D指针名前只用一对方括号符,不管所删除数组的维数12具有转换函数功能的构造函数,应该是( )。 A不带参数的构造函数 B带有一个参数的构造函数 C带有两个以上参数的构造函数 D默认构造函数二、判断下列描述是否正确,对者划,错者划1指向对象的指针和指向类的成员的指针在表达形式上是不相同的。2已知:m是类A的对象,n是类A的公有数据成员,P是指向类A中n成员的 指针。下述两种表示是等价的。 mn和m*p3指向对象的指针与对象都可以作为函数参数,但是使用前者比后者好些。4对象引用作函数参数比用对象指针更方便些。5对象数组的元素可以是不同类的对象。6对象数组既可以赋初值又可以赋值。7指向对象数组的指针不一定必须指向数组的首元素。8一维对象指针数组的每个元素应该是某个类的对象的地址值。9const char*p说明了p是指向字符串常量的指针。10.一个能够更新的变量使用在一个不能被更新的环境中是不破坏类型保护的,反之亦然。11.一个类的构造函数中可以不包含对其子对象的初始化。12.转换函数不是成员函数,它是用来进行强制类型转换的。三、分析下列程序的输出结果1#includeiostream.hclass A public: A(); A(int i,int j); A(); void Set(int i,int j)ai;bj; private: int a,b;; A:A() ab=O; cout”Default constructor calledn”; A :A(int i,int j) a=i; bj; cout”Constructor:a”a”,b”bendl;A :A() cout”Destructor calleda”a”,b”bendl;void main() cout”Starting1:n”; A a3; for(int i=0;i3;i十十) a1Set(2*i十1,(i十1)* 2); cout”Endingln”; cout”Starting2n”; A b3A(5,6),A(7,8),A(9,l0); cout”Ending2n”;分析:程序中出现了构造函数重载和对象数组等语法现象.并给了对象数组赋值和赋初值的方法。2#include Class Bint x,y; public:B();B(int i); B(int i,int j); B();void Print();B:B() x=y=0;Cout”Default constructtorl called.n”;B:B(int i)x=i; y=0;Cout”Donstructtorl called.n”;B:B(int i, int j)x=i; y=j;Cout”Donstructtorl called.n”; B: B() cout”Donstructtor called.n”;void B:Print() cout”x=”x”y=”yendl; Void main()B *p;Prt=new B3;Prt0=B();Prt1=B(5);Prt2=B(2,3);For(int i=0;i3;i+)Prti=Print();Deleteptr;该程序的执行结果?3.#include Class Apublic; A(int i=o)mi;cout”Constructor called”mendl; void Set(int i) mi; void Print()constcoutmendl; A()cout”Destructor called.”mendl; private: int m; ; void main() const N5; A my; myN; myPrint(); 分析: 该程序中出现了常成员函数Frint()的语法现象。它的出现是为了满足主函数myPrint()的需要,这里的my实际上是一个常对象,因为它的值为N的值,N是一个整型量。语句myN;是将一个常整型量通过调用一个参数的构造函数转换为一个对值后,再赋值给对象my的。因此,这里先调用构造函数,后调用析构函数。 4 #includeiostreamh Class A public: A(int iO) mi;cout”Constructor called”mendI; void Set(int i)mi; void Print( ) const coutmendl; A()cout”Destructor called”mendl; private: int m; ; void fun(const A&c) c.print( ); void main() fun(5); 分析: 该程序中出现了对象引用作函数参数的语法现象。在主函数中,调用函数实参为常量5,这时要调用一个参数的构造函数,将5转换为A类的一个对象,给形参引用,该对象将被析构。 请读者按下列要求对原程序进行修改,然后再调试,看输出结果有何变化? (1)去掉类A中定义的成员函数Set()。 (2)将一般函数fun()后形参改为对象。 5. #includeiostreamh Class complex public: complex(); complex(double real); complex(double real,double imag); void Print(); void Set(double r,double i); private: double reaI,imag; ; complex:complex( ) Set(0,0,00); cout”Constructor:real=real,imag=imagendl; complex:complex(double real,double imag) Set(real,imag); cout”Constructor: real”real“,imag”imagendl;void complex:Print( ) if(imagO) coutrealimagiendl; else coutreal十imagiendl;void complex:Set(double r,double i) real:r:imag:i; void rnain( ) complex c1; complex c2(68); complex c3(56,79); c1Print( ); c2Print( ); c3Print( ); c1complex(12,34); c2:5: c3;complex(); c1Print(); c2Print();c3Print( ); 分析: 该程序中类complex是用来描述复数的一个类,它有实部和虚部两个数据成员。 在该程序主函数中,首先创建3个对象cl,c2和c3,分别调用默认构造函数,一个数的构造函数和两个参数的构造函数创建这3个对象。然后,分别调用成员函数Print(输出显示这3个复数。主函数中,接着又改变前边定义的3个对象的值,通过赋值表达进行的。这时分别调用两个参数构造函数、一个参数构造函数和默认构造函数完成改值的操作。请读者使用类comPlex中成员函数Set()改变某些对象的值,并上机调试。 四、分析下列程序,并回答提出的问题 P159 #includeiostreamh #includestringh class String public: String() Length:O;Buffer0; Stfing(const char *str); Void Setc(int index,char newcha); char Getc(int index)const; int Getlength( )const return Length; void Print( )const if(BufferO) coute
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 勘察审查规定规定合同4篇
- 商住楼前期物业管理委托合同2篇
- 安徽省淮南市第二中学2025-2026学年高二上学期开学考试地理试卷
- 热电联产能源转型责任-洞察及研究
- 绵阳市东辰学校2025-2026学年高二上学期开学分班检测英语试卷(含答案)
- 河北省唐山市迁西县2024-2025学年五年级下学期期末数学试题
- 2025-2026学年黑龙江省佳木斯市富锦市三江区域联合体学校人教版三年级上册开学摸底考试数学试卷(含答案)
- 四川省仁寿城区初中学校2024-2025学年九年级上学期期中质量检测物理试卷(学生版)
- 部委保密安全培训课件
- 达州安全知识培训课件
- 2025-2026学年湘美版(2024)小学美术三年级上册《创意钟表》教学设计
- 2025交通行业工会改革计划
- 2022民用建筑暖通空调设计技术措施
- 班干部聘任仪式
- 2025教科版三年级科学上册教学计划、教学设计(附目录)
- 第2章-静电场和恒定电场
- 2025-2026学年苏教版(2024)小学科学三年级上册(全册)课时练习及答案(附目录P102)
- 2025年小学道德与法治课程标准(2022版)考试测试卷及答案(共三套)
- 2025年广西中考化学试卷真题(含答案解析)
- 高中物理进阶学习资料-第3章 刚体力学基础(大学物理版)
- 冠脉微循环障碍课件
评论
0/150
提交评论