第六章问题对象的指针、this指针、const、new和delete_第1页
第六章问题对象的指针、this指针、const、new和delete_第2页
第六章问题对象的指针、this指针、const、new和delete_第3页
第六章问题对象的指针、this指针、const、new和delete_第4页
第六章问题对象的指针、this指针、const、new和delete_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、对象的指针、this指针、const、new和delete63 练习题1指向对象的指针与指向对象成员的指针有何不同?2指向成员函数的指针和指向一般函数的指针有何区别?3对象指针作函数参数与对象作函数参数有何不同?4对象引用作函数参数与对象指针作函数参数有何区别?5什么是this指针?它有何作用?6什么是对象数组?它如何定义?如何赋值?7。指向对象数组的指针如何定义?如何赋值?8什么是指针数组?什么是对象指针数组?它们是如何定义的?它们又将如何被赋值?9。带参数的main(的形式如何?main(有哪些参数?各表示什么意思?10如何定义一个常量?11使用const修饰符定义常指针时,const位置

2、有何影响?举例说明,如何定义一个常量指针?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、指针。假设类有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,( 是正确的。AA1

4、P5;BA1一P5;CA1.*p5;D*A1p5;5已知类A中一个成员函数说明如下所示。void Set(A&a;其中,A&a的含意是( 。A指向类A的指针为aB将a的地址值赋给变量Setc. a是类A的对象引用,用来作函数Set()的形参D. 变量A与a按位与作为函数Set()的参数6下列关于对象数组的描述中,( 是错误的。A对象数组的下标是从o开始的B对象数组的数组名是一个常量指针C对象数组的每个元素是同一个类的对象D对象数组只能赋初值,而不能被赋值7下列定义中,( 是定义指向数组的指针P。A int*p5;B int(*p5;C (int *p5Dint*p;8下列说明中

5、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关于de

6、lete运算符的下列描述中,( 是错的。A.它必须用于new返回的指针B它也适用于空指针C对一个指针可以使用多次该运算符D指针名前只用一对方括号符,不管所删除数组的维数12具有转换函数功能的构造函数,应该是( 。A不带参数的构造函数B带有一个参数的构造函数C带有两个以上参数的构造函数D默认构造函数二、判断下列描述是否正确,对者划,错者划×1指向对象的指针和指向类的成员的指针在表达形式上是不相同的。2已知:m是类A的对象,n是类A的公有数据成员,P是指向类A中n成员的指针。下述两种表示是等价的。mn和m*p3指向对象的指针与对象都可以作为函数参数,但是使用前者比后者好些。4对象引用作函

7、数参数比用对象指针更方便些。5对象数组的元素可以是不同类的对象。6对象数组既可以赋初值又可以赋值。7指向对象数组的指针不一定必须指向数组的首元素。8一维对象指针数组的每个元素应该是某个类的对象的地址值。9const char*p说明了p是指向字符串常量的指针。10.一个能够更新的变量使用在一个不能被更新的环境中是不破坏类型保护的,反之亦然。11.一个类的构造函数中可以不包含对其子对象的初始化。12.转换函数不是成员函数,它是用来进行强制类型转换的。三、分析下列程序的输出结果1#includeiostream.hclass Apublic:A(;A(int i,int j; A(;void Se

8、t(int i,int jai;bj;private:int a,b;;A:A( ab=O;cout”Default constructor calledn”; A :A(int i,int ja=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,l

9、0;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 ix=i;y=0;Cout<<”Donstructtorl called.n”;B:B(int i, int jx=i;y=j;Cout<<”Donstructtorl called

10、.n”; B: B( cout<<”Donstructtor called.n”;void B:Print( cout<<”x=”< ” y= ” < Void main(B *p;Prt=new B3;Prt0=B(;Prt1=B(5;Prt2=B(2,3;For(int i=0;i<3;i+Prti=Print(;Deleteptr;该程序的执行结果?3.#include Class Apublic;A(int i=omi;cout”Constructor called”mendl;void Set(int i mi;void Print(cons

11、tcoutmendl; A(cout”Destructor called.”mendl;private:int m;void main(const N5;A my;myN;myPrint(;分析:该程序中出现了常成员函数Frint(的语法现象。它的出现是为了满足主函数myPrint(的需要,这里的my实际上是一个常对象,因为它的值为N的值,N是一个整型量。语句myN;是将一个常整型量通过调用一个参数的构造函数转换为一个对值后,再赋值给对象my的。因此,这里先调用构造函数,后调用析构函数。4#includeiostreamhClass Apublic:A(int iOmi;cout”Constr

12、uctor called”mendI;void Set(int imi;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将一般

13、函数fun(后形参改为对象。5.#includeiostreamhClass complexpublic: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="< complex:complex(double real,double imagSet(real,imag;cout”C

14、onstructor: real”real“,imag”imagendl;void complex:Print( if(imagOcoutrealimagiendl;elsecoutreal十imagiendl;void complex:Set(double r,double ireal: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( ;分

15、析:该程序中类complex是用来描述复数的一个类,它有实部和虚部两个数据成员。在该程序主函数中,首先创建3个对象cl,c2和c3,分别调用默认构造函数,一个数的构造函数和两个参数的构造函数创建这3个对象。然后,分别调用成员函数Print(输出显示这3个复数。主函数中,接着又改变前边定义的3个对象的值,通过赋值表达进行的。这时分别调用两个参数构造函数、一个参数构造函数和默认构造函数完成改值的操作。请读者使用类comPlex中成员函数Set(改变某些对象的值,并上机调试。四、分析下列程序,并回答提出的问题 P159#includeiostreamh#includestringhclass String public:String(Length:O;Buffer0;Stfing(const char *str;Void Setc(int index,char newcha;char Getc(int indexconst;int Getlength( const return Length;void Print( constif(BufferOcout"emptyn&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论