习题指导1-类.doc_第1页
习题指导1-类.doc_第2页
习题指导1-类.doc_第3页
习题指导1-类.doc_第4页
习题指导1-类.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

习题指导类与对象82典型例题分析与解答例题1:下列有关类的说法不正确的是()。A对象是类的一个实例B任何一个对象只能属于一个具体的类C一个类只能有一个对象D类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。例题2:下面()项是对构造函数和析构函数的正确定义。Avoid X:X(),void X:X()BX:X(参数),X:X()CX:X(参数),X:X(参数)Dvoid X:X(参数),void X:X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。例题3:()的功能是对象进行初始化。A析构函数B.数据成员C.构造函数D.静态成员函数答案:C分析:当一个对象定义时,C+编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C+编译系统自动调用析构函数注销该对象并进行善后工作;例题4:下列表达方式正确的是()。Aclass PBclass Ppublic:public:int x=15;int x;voidshow()coutx;void show()coutx;Cclass PD.class Pintf;public:;int a;f=25;void Seta (int x) a=x;答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。例题5:拷贝构造函数具有的下列特点中,()是错误的。A如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B拷贝构造函数只有一个参数,并且是该类对象的引用C拷贝构造函数是一种成员函数D拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。例题6:关于静态成员的描述中,()是错误的。A静态成员可分为静态数据成员和静态成员函数B静态数据成员定义后必须在类体内进行初始化C静态数据成员初始化不使用其构造函数D静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。例题7:关于友元的描述中,()是错误的。A友元函数是成员函数,它被说明在类体内B友元函数可直接访问类中的私有成员C友元函数破坏封装性,使用时尽量少用D友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。例题8:设有如下程序结构:class Box;void main()Box A,B,C; 该程序运行时调用(1)次构造函数;调用(2)次析构函数。答案:(1)3(2)3分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。例题9:设A为test类的对象且赋有初值,则语句test B(A);表示。答案:将对象A复制给对象B。分析:执行test B(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B对象。例题10:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为(1)的成员;若要访问其他成员变量,需要通过(2)函数或(3)函数。答案:(1) public(2)成员函数(3)友元函数分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。例题11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#includeclass oneint a1,a2;public:one(int x1=0, x2=0);void main()one data(2,3);coutdata.a1endl;coutdata.a2endl;分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。改正后的程序如下:#includeclass one int a1, a2;public:one(int x1=0, int x2=0) a1=x1;a2=x2;int geta1() return a1; int geta2() return a2; ;void main()one data(2,3);coutdata.geta1()endl;coutdata.geta2()endl;例题12:分析以下程序的错误原因,给出修改方案使之能正确运行。#include class Amplifierfloat invol,outvol;public:Amplifier(float vin,float vout)invol=vin;outvol=vout;float gain();Amplifier:float gain() return outvol/invol; void main()Amplifier amp(5.0,10.0);coutgain()endl;分析:成员函数在类体外定义格式是:函数返回类型类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include class Amplifierfloat invol,outvol;public:Amplifier(float vin,float vout)invol=vin;outvol=vout;float gain();float Amplifier:gain() return outvol/invol;void main() Amplifier amp(5.0,10.0);coutamp.gain()endl;例题14:定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数使用这个类,实现对学生数据的赋值和输出。程序代码如下:#include#includeclassstudentint no;char name10;int age;public:student(int i, char *str, int g)no=i;strcpy(name,str);age=g;student( )no=0;strcpy(name,”none”);age=-1;void display()if (no0)cout”no” no”:”name” is ”age” years old.n”;elsecout”no”no”: None!n”;void main() student d1(1001,”Tom”,18);d1.display();student d2;d2.display();83教材习题分析与解答1选择题(1)对类的构造函数和析构函数描述正确的是( )。A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载答案:A(2)类的析构函数的作用是(D)。A.一般成员函数B.类的初始化C.对象初始化D.删除对象答案:D(3)假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。A.OneClass(OneClass p);B. OneClass& (OneClass p);C. OneClass(OneClass & p);D. OneClass (OneClass *p);答案:C(4)下面对于友元函数描述正确的是()。A.友元函数的实现必须在类的内部定义B.友元函数是类的成员C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员答案:C(5)对于结构中定义的成员,其默认的访问权限为()。A.publicB. protectedC.privateD. static答案:C(6)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。A.publicB. protectedC.privateD. static答案:A(7)下面对静态数据成员的描述中,正确的是()。A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以在类体内进行初始化C.静态数据成员不能受private控制符的作用D.静态数据成员可以直接用类名调用答案:C(8)下面对静态数据成员的描述中,正确的是()。A.静态数据成员是类的所有对象共享的数据B.类的每一个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用答案:A2写出下列程序的运行结果。(1)#include class Pointint x,y;public:Point()x=1;y=1;Point()coutPoint x,y is deleted.endl; ;void main()Pointa;运行结果为:Point 1,1 is deleted.(2) #include #include int count=0;class Pointint x,y;public:Point() x=1;y=1;count+;Point()count-;friend void display();;void display() cout There are count points,endl;void main() Point a;display();Point b5;display();display();运行结果为:There are 1 points,There are 6 points,There are 1 points,(3)#includeclass Csampleint i;public:Csample( );void Display( );Csample();Csample:Csample( ) cout”Constructor”,”;i=0;void Csample:Display()cout”i=”i”,”;Csample:Csample( ) cout”Destructor”endl;void main( ) Csample a;a.Display( );运行结果为:Constructor,i=0,Destructor(4) #include #include class Csampleint i;public:Csample()cout constructor1 endl; Csample(int val)cout Constructor2endl;i=val;void Display()couti=iendl;Csample()coutDestructorendl;getch();void main()Csample a,b(10);a.Display();b.Display();运行结果为:Constructor1Constructor2i=-858993460i=10DestructorDestructor(5)#includeclass Csampleprivate:int i;static int k;public:Csample( );void Display( );int Csample:k=0;Csample:Csample( ) i=0;k+;void Csample:Display( )cout”i=”i”,k=”kendl;void main( ) Csample a,b;a.Display( );b.Display( );运行结果为:i=0,k=2i=0,k=2 (5)编写一个程序计算两个给定的长方形的周长和面积。#includeclass rectangleint len,wid;public:rectangle(int i=0,int j=0) len=i;wid=j;friend int area(rectangle temp) int s=temp.len*temp.wid;return s;friend fun(rectangle temp)int p=2*(temp.len+temp.wid);return p;void main()rectangle a(10,20);cout长方形的周长和面积为:area(a)tfun(a)endl;rectangle b(100,200);cout长方形的周长和面积为:area(b)tfun(b)endl;8.4 补充习题2.填空题(1) OOP技术由、方法、消息和继承五个基本的概念所组成。(2)类的成员函数可以在定义,也可以在定义。(3)类test的析构函数名是。(4)类是用户定义的类型,具有类类型的变量称作_。(5)一个类的析构函数不允许有。(6)建立对象时,为节省内存,系统只给_分配内存。(7)用于定义C+的类的关键字有_、_和union。(8)类test的构造函数是和_同名的函数,析构函数是_。(9)类中的数据和成员函数默认访问类型为。(10)当建立一个新对象时,程序自动调用_。3. 改错题(1)下面的程序定义了一个Point类,找出程序中的错误语句并改正。#includeclass Pointint x;public:void Point(int a)x=a;i

温馨提示

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

评论

0/150

提交评论