第六章问题对象的指针、this指针、const、new和delete

第六章问题对象的指针、this指针、const、new和delete

ID:17635789

大小:61.00 KB

页数:8页

时间:2018-09-04

上传者:U-3777
第六章问题对象的指针、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页
资源描述:

《第六章问题对象的指针、this指针、const、new和delete》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

对象的指针、this指针、const、new和delete6.3练习题1.指向对象的指针与指向对象成员的指针有何不同?2.指向成员函数的指针和指向一般函数的指针有何区别?3.对象指针作函数参数与对象作函数参数有何不同?4.对象引用作函数参数与对象指针作函数参数有何区别?5.什么是this指针?它有何作用?6.什么是对象数组?它如何定义?如何赋值?7。指向对象数组的指针如何定义?如何赋值?8.什么是指针数组?什么是对象指针数组?它们是如何定义的?它们又将如何被赋值?9。带参数的main()的形式如何?main()有哪些参数?各表示什么意思?10.如何定义一个常量?11.使用const修饰符定义常指针时,const位置有何影响?举例说明,如何定义一个常量指针?12.如何定义常引用?13,什么是类型适应?举例说明在什么情况下会出现类型适应。14.常成员函数有何特点?在什么情况下需要定义常成员函数?l5.常数据成员的初始化如何实现?l6.如何对子对象进行初始化?17.运算符new和delete的功能是什么?它们可以用来创建动态对象和删除动态对象吗?18.使用new和delete创建和删除动态数组的格式如何?19.在例6.17中,程序执行下列语句20.C十十中类型的自动隐式转换有哪些规则?21.构造函数都具有类型转换函数的功能吗?22.什么是转换函数?定义时应注意哪些问题?6.4一、选择填空1.已知一个类A。(C)是指向类A成员函数的指针。假设类有3个公有成员:voidf1(int),voidf2(int)和inta。A.A*p;B.intA::*pc=&A::a;C.voidA::*pa();D.A*pp;2.运算符一>*的功能是()。A.用来表示指向对象指针对指向类成员指针的操作B.用来表示对象对指向类成员指针的操作C.用来表示指向对象指针对类成员的操作D.用来表示对象类成员的操作3.已知fl(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用()是正确的。A.p=f1; B.p=A::f1;C.p=A::f1();D.p=fl();4.已知:P是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,()是正确的。A.A1.P=5;B.A1一>P=5;C.A1.*p=5;D.*A1.p=5;5.已知类A中一个成员函数说明如下所示。voidSet(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*p[5];B.int(*p)[5];C.(int*)p[5]D.int*p[];8.下列说明中Constchar*Ptr;ptr应该是()。A.指向字符常量的指针B.指向字符的常量指针C.指向字符串常量的指针D.指向字符串的常量指针9.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中是正确的。A.voidprint()const;B.constvoidPrint();C.voidconstprint();D.voidprint(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成员的指针。下述两种表示是等价的。m.n和m.*p3.指向对象的指针与对象都可以作为函数参数,但是使用前者比后者好些。4.对象引用作函数参数比用对象指针更方便些。5.对象数组的元素可以是不同类的对象。6.对象数组既可以赋初值又可以赋值。7.指向对象数组的指针不一定必须指向数组的首元素。8.一维对象指针数组的每个元素应该是某个类的对象的地址值。9.constchar*p说明了p是指向字符串常量的指针。10.一个能够更新的变量使用在一个不能被更新的环境中是不破坏类型保护的,反之亦然。11.一个类的构造函数中可以不包含对其子对象的初始化。12.转换函数不是成员函数,它是用来进行强制类型转换的。三、分析下列程序的输出结果1.#include<iostream.h>classA{public:A();A(inti,intj); ~A();voidSet(inti,intj){a=i;b=j;}private:inta,b;};A::A(){a=b=O;cout<<”Defaultconstructorcalled.\n”;}A::A(inti,intj) {a=i;b=j;cout<<”Constructor:a=”<<a<<”,b=”<<b<<endl;}A::~A(){cout<<”Destructorcalled.a=”<<a<<”,b=”<<b<<endl;}voidmain(){cout<<”Starting1:\n”;Aa[3];for(inti=0;i<3;i十十)a[1].Set(2*i十1,(i十1)*2);cout<<”Endingl…\n”;cout<<”Starting2…\n”;Ab[3]={A(5,6),A(7,8),A(9,l0)};cout<<”Ending2…\n”;}分析:程序中出现了构造函数重载和对象数组等语法现象.并给了对象数组赋值和赋初值的方法。2.#includeClassB{intx,y;public:B();B(inti);B(inti,intj); ~B();voidPrint();};B::B(){x=y=0;Cout<<”Defaultconstructtorlcalled. ”;}B::B(inti){x=i;y=0;Cout<<”Donstructtorlcalled. ”;}B::B(inti,intj){x=i;y=j; Cout<<”Donstructtorlcalled. ”;}`B::~B(){cout<<”Donstructtorcalled. ”;}voidB::Print(){cout<<”x=”<ClassA{public;A(inti=o){m=i;cout<<”Constructorcalled.”<<m<<endl;}voidSet(inti){m=i;}voidPrint()const{cout<<m<<endl;}~A(){cout<<”Destructorcalled.”<<m<<endl;}private:intm;};voidmain(){constN=5;Amy;my=N;my.Print();}分析:该程序中出现了常成员函数Frint()的语法现象。它的出现是为了满足主函数my.Print()的需要,这里的my实际上是一个常对象,因为它的值为N的值,N是一个整型量。语句my=N;是将一个常整型量通过调用一个参数的构造函数转换为一个对 值后,再赋值给对象my的。因此,这里先调用构造函数,后调用析构函数。4.#include<iostream.h>ClassA{public:A(inti=O){m=i;cout<<”Constructorcalled.”<<m<<endI;}voidSet(inti){m=i;}voidPrint()const{cout<<m<<endl;}~A(){cout<<”Destructorcalled.”<<m<<endl;}private:intm;};voidfun(constA&c){c.print();}voidmain(){fun(5);}分析:该程序中出现了对象引用作函数参数的语法现象。在主函数中,调用函数实参为常量5,这时要调用一个参数的构造函数,将5转换为A类的一个对象,给形参引用,该对象将被析构。请读者按下列要求对原程序进行修改,然后再调试,看输出结果有何变化?(1)去掉类A中定义的成员函数Set()。(2)将一般函数fun()后形参改为对象。5.#include<iostream.h>Classcomplex{public:complex();complex(doublereal);complex(doublereal,doubleimag);voidPrint();voidSet(doubler,doublei);private:doublereaI,imag;};complex::complex(){ Set(0,0,0.0);cout<<”Constructor:real="<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭