1、对象的指针、this 指针、const、new 和 delete63 练习题1指向对象的指针与指向对象成员的指针有何不同?2指向成员函数的指针和指向一般函数的指针有何区别?3对象指针作函数参数与对象作函数参数有何不同?4对象引用作函数参数与对象指针作函数参数有何区别?5什么是 this 指针?它有何作用?6什么是对象数组?它如何定义?如何赋值?7。指向对象数组的指针如何定义?如何赋值?8什么是指针数组?什么是对象指针数组?它们是如何定义的?它们又将如何被赋值?9。带参数的 main()的形式如何?main()有哪些参数?各表示什么意思?10如何定义一个常量?11使用 const 修饰符定义常指
2、针时,const 位置有何影响?举例说明,如何定义一个常量指针?12如何定义常引用?13,什么是类型适应?举例说明在什么情况下会出现类型适应。14常成员函数有何特点?在什么情况下需要定义常成员函数?l 5常数据成员的初始化如何实现?l 6如何对子对象进行初始化?17运算符 new 和 delete 的功能是什么?它们可以用来创建动态对象和删除动态对象吗?18使用 new 和 delete 创建和删除动态数组的格式如何?19在例 617 中,程序执行下列语句20C 十十中类型的自动隐式转换有哪些规则?21构造函数都具有类型转换函数的功能吗?22什么是转换函数?定义时应注意哪些问题?6.4一、选择
3、填空1已知一个类 A。(C)是指向类 A 成员函数的指针。假设类有 3 个公有成员:void f1(int),void f2(int)和 int a。AA*p;B. int A:*pcCA1.*p5;D*A1p5;5已知类 A 中一个成员函数说明如下所示。void Set(A其中,AA: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() c
4、out”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;CoutClass Apublic;A(int
5、 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;是将一个常整型量通过调用一个参数的构造函数转换为一个对值后
6、,再赋值给对象 my 的。因此,这里先调用构造函数,后调用析构函数。4#includeiostreamhClass Apublic: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 complex:complex( )Set(0,0,00);cout”Constructor:real=“real“,imag=“imag“endl; com
7、plex:complex(double real,double imag)Set(real,imag);cout”Constructor: real”real“,imag”imagendl;void complex:Print( )if(imagO)coutrealimagiendl;elsecoutreal十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( );c3Prin
8、t( );c1complex(12,34);c2:5:c3;complex();c1Print();c2Print();c3Print( );分析:该程序中类 complex 是用来描述复数的一个类,它有实部和虚部两个数据成员。在该程序主函数中,首先创建 3 个对象 cl,c2 和 c3,分别调用默认构造函数,一个数的构造函数和两个参数的构造函数创建这 3 个对象。然后,分别调用成员函数 Print(输出显示这 3 个复数。主函数中,接着又改变前边定义的 3 个对象的值,通过赋值表达进行的。这时分别调用两个参数构造函数、一个参数构造函数和默认构造函数完成改值的操作。请读者使用类 comPlex
9、 中成员函数 Set()改变某些对象的值,并上机调试。四、分析下列程序,并回答提出的问题 P159#includeiostreamh#includestringhclass 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( )constif(BufferO)cout“emptyn“;elsecoutBufferendl;void APPend(const char *Tail)String()delele Buffer;private:int Length;char * Buffer;String :String(const char * str) Length=strlen(str);Buffer;new char Length+1strcpy(Buffer,str);void String:Setc(int index,char newchar) 缺 160 161