java中的类的专题.docx

上传人:b****7 文档编号:25765201 上传时间:2023-06-13 格式:DOCX 页数:38 大小:27.55KB
下载 相关 举报
java中的类的专题.docx_第1页
第1页 / 共38页
java中的类的专题.docx_第2页
第2页 / 共38页
java中的类的专题.docx_第3页
第3页 / 共38页
java中的类的专题.docx_第4页
第4页 / 共38页
java中的类的专题.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

java中的类的专题.docx

《java中的类的专题.docx》由会员分享,可在线阅读,更多相关《java中的类的专题.docx(38页珍藏版)》请在冰豆网上搜索。

java中的类的专题.docx

java中的类的专题

(1)类的默认的无参构造函数[]。

A)在任何情况下都存在

B)仅当未定义无参构造函数时存在

C)仅当未定义有参构造函数时存在

D)仅当未定义任何构造函数时存在

(2)类的默认的拷贝构造函数[]。

A)在任何情况下都存在

B)仅当未定义拷贝构造函数时存在

C)仅当未定义有参构造函数时存在

D)仅当未定义任何构造函数时存在

改错题:

每题有一处错误,请在出错语句后用注释说明出错原因并提出更改意见

(1)classLocation{

intX,Y;

protected:

intSetZero(intzeroX,intzeroY);

private:

intlength,height;

public:

voidLocation(intinitX,intinitY);

intGetX();

intGetY();};

(2)下面的程序有一处语法错误:

#include

classPair{

intX,Y;

public:

Pair(intinitX,intinitY):

X(initX),Y(initY){}

intsumXY(){returnX+Y;};

};

voidmain()

{

PairA1(5,3);

cout<

}

题1.分析以下程序执行的结果

#include

#include

classSample

{

   public:

       intx,y;

       Sample(){x=y=0;}

       Sample(inta,intb){x=a;y=b;}

       voiddisp()

       {

           cout<<"x="<

       }

};

voidmain()

{

   Samples1(2,3);

   s1.disp();

}

解:

本题说明了重载构造函数的定义方法。

首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员。

所以输出为:

x=2,y=3。

注意:

构造函数是唯一不能被显式调用的成员函数,它在定义类的对象时自动调用,也称为隐式调用。

--------------------------------------------------------

题2.分析以下程序的执行结果

#include

classSample

{

   intx,y;

   public:

       Sample(){x=y=0;}

       Sample(inta,intb){x=a;y=b;}

       ~Sample()

       {

           if(x==y)

               cout<<"x=y"<

           else

               cout<<"x!

=y"<

       }

       voiddisp()

       {

           cout<<"x="<

       }

};

voidmain()

{

   Samples1(2,3);

   s1.disp();

}

解:

本题说明了析构函数的定义方法。

首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员,最后在退出程序时自动调用析构函数。

所以输出为:

   x=2,y=3

   x!

=y

注意:

析构函数在对象的作用域结束时被自动隐式调用。

----------------------------------------------------

题3.分析以下程序的输出结果

#include

classSample

{

   intx;

   public:

       Sample(inta)

       {

           x=a;

           cout<<"constructingobject:

x="<

       }

};

voidfunc(intn)

{

   staticSampleobj(n);

}

voidmain()

{

   func

(1);

   func(10);

}

解:

本题说明静态对象构造函数的调用情况,由于在func()函数中定义的对象obj是静态对象,故只被构造一次,所以输出为:

       counstructingobject:

x=1

注意:

静态对象和静态变量一样,只被构造一次。

块作用域的静态变量,在首次进入到定义该静态对象的函数时,构造该静态对象,以后进入该函数时不再构造静态对象。

------------------------------------------------------

题1.4分析以下程序的执行结果

#include

classSample

{

   intx,y;

   public:

       Sample(){x=y=0;}

       Sample(inta,intb){x=a;y=b;}

       voiddisp()

       {

           cout<<"x="<

       }

};

voidmain()

{

   Samples(2,3),*p=&s;

   p->disp();

}

解:

本题说明了对象指针的使用方法。

这里通过指向对象的指针来调用对象的成员函数。

对象指针p指向对象s,p->disp()等价于s.disp()。

所以输出为:

x=2,y=3.

题1.5分析以下程序的执行结果

#include

classSample

{

   public:

       intx;

       inty;

       voiddisp()

       {

           cout<<"x="<

       }

};

voidmain()

{

   intSample:

:

*pc;

   Samples;

   pc=&Sample:

:

x;

   s.*pc=10;

   pc=&Sample:

:

y;

   s.*pc=20;

   s.disp();

}

解:

本题说明了类数据成员指针的使用方法。

在main()中定义的pc是一个指向Sample类数据成员的指针。

执行pc=&Sample:

:

x时,pc指向数据成员x,语句s.*pc=10等价于s.x=10(为了保证该语句正确执行,Sample类中的x必须是公共成员);执行pc=&Sample:

:

y时,pc指向数据成员y,语句s.*pc=20等价于s.y=20(同样,Sample类中的y必须是公共成员)。

所以输出为:

x=10,y=20。

-----------------------------------------------------

题1.6下面是一个类的测试程序,设计出能使用如下测试程序的类。

voidmain()

{

   Testa;

   a.init(68,55);

   a.print();

}

其执行结果为:

   测试结果:

68-55=13

解:

本题是要设计Test类,其设计方法很多,这里给出一种解法。

Test类包含两个私有数据成员x、y,以及两个公共成员函数init()和print(),前者用于给数据成员赋值,后者用于x,y的减法运算和输出相应的结果。

#include

classTest

{

   intx,y;

   public:

       voidinit(int,int);

       voidprint();

};

voidTest:

:

init(inti,intj)

{

   x=i;y=j;

}

voidTest:

:

print()

{

   cout<<"测试结果:

"<

}

注意:

类是一个外壳,它包含了类实例化时数据和代码的使用方法,它是一种模板,只有在定义类的对象时,才为对象分配空间,而不会为类分配空间。

------------------------------------------------------

1:

下列有关类的说法不正确的是()。

A.A. 对象是类的一个实例

B.B. 任何一个对象只能属于一个具体的类

C.C. 一个类只能有一个对象

D.D.类与对象的关系和数据类型与变量的关系相似

2:

下面()项是对构造函数和析构函数的正确定义。

A.voidX:

:

X(),voidX:

:

~X()

B.X:

:

X(参数),X:

:

~X()

C.X:

:

X(参数),X:

:

~X(参数)

D.voidX:

:

X(参数),voidX:

:

~X(参数)

3:

()的功能是对象进行初始化。

A.析构函数B.数据成员C.构造函数D.静态成员函数

 

4:

下列表达方式正确的是()。

A.classP{B.classP{

public:

public:

intx=15;intx;

voidshow(){cout<

};}

C.classP{D.classP{

intf;public:

};inta;

f=25;voidSeta(intx){a=x;}

5:

拷贝构造函数具有的下列特点中,()是错误的。

A. 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的

B. 拷贝构造函数只有一个参数,并且是该类对象的引用

C. 拷贝构造函数是一种成员函数

D.拷贝构造函数的名字不能用类名

6:

关于静态成员的描述中,()是错误的。

A. 静态成员可分为静态数据成员和静态成员函数

B. 静态数据成员定义后必须在类体内进行初始化

C. 静态数据成员初始化不使用其构造函数

D. 静态数据成员函数中不能直接引用非静态成员

7:

设有如下程序结构:

classBox

{…};

voidmain()

{BoxA,B,C;}

该程序运行时调用

(1)次构造函数;调用

(2)次析构函数。

8:

设A为test类的对象且赋有初值,则语句testB(A);表示。

例题11:

分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。

#include

classone

{inta1,a2;

public:

one(intx1=0,x2=0);

};

voidmain()

{onedata(2,3);

cout<

cout<

}

分析:

出错原因:

构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。

改正后的程序如下:

#include

classone

{inta1,a2;

public:

one(intx1=0,intx2=0){a1=x1;a2=x2;}

intgeta1(){returna1;}

intgeta2(){returna2;}

};

voidmain()

{onedata(2,3);

cout<

cout<

}

例题12:

分析以下程序的错误原因,给出修改方案使之能正确运行。

#include

classAmplifier{

floatinvol,outvol;

public:

Amplifier(floatvin,floatvout)

{invol=vin;outvol=vout;}

floatgain();

};

Amplifier:

:

floatgain(){returnoutvol/invol;}

voidmain()

{Amplifieramp(5.0,10.0);

cout<<"\n\nThegainis=>"<

}

分析:

成员函数在类体外定义格式是:

函数返回类型类名:

成员函数名(参数表);成员函数调用格式是:

对象名.成员函数名(参数表)。

改正后的程序如下:

#include

classAmplifier

{floatinvol,outvol;

public:

Amplifier(floatvin,floatvout){invol=vin;outvol=vout;}

floatgain();

};

floatAmplifier:

:

gain(){returnoutvol/invol;}

voidmain()

{Amplifieramp(5.0,10.0);

cout<<"\n\nThegainis=>"<

}

 

例题14:

定义一个学生类,其中有3个数据成员:

学号、姓名、年龄,以及若干成员函数。

同时编写main函数使用这个类,实现对学生数据的赋值和输出。

程序代码如下:

#include

#include

classstudent

{intno;

charname[10];

intage;

public:

student(inti,char*str,intg)

{no=i;

strcpy(name,str);

age=g;

}

student()

{no=0;

strcpy(name,”none”);

age=-1;

}

voiddisplay()

{if(no>0)cout<<”no”<

”<

elsecout<<”no”<

None!

\n”;

}

};

voidmain()

{studentd1(1001,”Tom”,18);

d1.display();

studentd2;

d2.display();

}

 

例题15:

计算两点之间的距离。

方法一:

可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。

#include

#include

classPoint

{public:

Point(inta=0,intb=0){x=a;y=b;}

intxcord(){returnx;}

intycord(){returny;}

private:

intx,y;

};

classDistance

{public:

Distance(Pointq1,Pointq2);

doublegetdist(){returndist;}

private:

Pointp1,p2;

doubledist;

};

Distance:

:

Distance(Pointq1,Pointq2):

p1(q1),p2(q2)

{doublex=double(p1.xcord()-p2.xcord());

doubley=double(p1.ycord()-p2.ycord());

dist=sqrt(x*x+y*y);

}

voidmain()

{Pointp(0,0),q(1,1);

Distancedis(p,q);

cout<<”Thedistanceis:

”<

}

1. 选择题

(1)对类的构造函数和析构函数描述正确的是()。

A.A.     构造函数可以重载,析构函数不能重载

B.B.     构造函数不能重载,析构函数可以重载

C.C.     构造函数可以重载,析构函数也可以重载

D.D.     构造函数不能重载,析构函数也不能重载

(2)类的析构函数的作用是(D)。

A.一般成员函数B.类的初始化C.对象初始化D.删除对象

(3)假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。

A.OneClass(OneClassp);B.OneClass&(OneClassp);

C.OneClass(OneClass&p);D.OneClass(OneClass*p);

(5)对于类中定义的成员,其默认的访问权限为()。

A.publicB.protectedC.privateD.static

(6)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。

A.publicB.protectedC.privateD.static

(7)下面对静态数据成员的描述中,正确的是()。

A.静态数据成员可以在类体内进行初始化

B.静态数据成员不可以在类体内进行初始化

C.静态数据成员不能受private控制符的作用

D.静态数据成员可以直接用类名调用

(8)下面对静态数据成员的描述中,正确的是()。

A.静态数据成员是类的所有对象共享的数据

B.类的每一个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员值

D.静态数据成员不能通过类的对象调用

2.2.  写出下列程序的运行结果。

(1)#include

classPoint{

intx,y;

public:

Point(){x=1;y=1;}

~Point(){cout<<"Point"<

};

voidmain()

{Pointa;}

运行结果为:

Point1,1isdeleted.

(3)#include

classCsample

{inti;

public:

Csample();

voidDisplay();

~Csample();

};

Csample:

:

Csample()

{cout<<”Constructor”<<”,”;

i=0;

}

voidCsample:

:

Display(){cout<<”i=”<

Csample:

:

~Csample()

{cout<<”Destructor”<

voidmain()

{Csamplea;

a.Display();

}

运行结果为:

Constructor,i=0,Destructor

(4)#include

#include

classCsample

{inti;

public:

Csample(){cout<<"constructor1"<

Csample(intval){cout<<"Constructor2"<

voidDisplay()

{cout<<"i="<

~Csample()

{cout<<"Destructor"<

};

voidmain()

{Csamplea,b(10);

a.Display();

b.Display();

}

运行结果为:

Constructor1

Constructor2

i=-858993460

i=10

Destructor

Destructor

(5)#include

classCsample

{private:

inti;

staticintk;

public:

Csample();

voidDisplay();

};

intCsample:

:

k=0;

Csample:

:

Csample(){i=0;k++;}

voidCsample:

:

Display(){cout<<”i=”<

voidmain()

{Csamplea,b;

a.Display();

b.Display();

}

运行结果为:

i=0,k=2

i=0,k=2

 

3.按要求编写程序。

(1)编写一个程序,设计一个产品类Product,其定义如下:

classProduct

{char*name;//产品名称

intprice;//产品单价

intquantity;//剩余产品数量

public:

product(char*n,intpintq);//构造函数

~product();//析构函数

voidbuy(intmoney);//购买产品

voidget()const;//显示剩余产品数量

};

并用数据进行测试。

(2)计算两点之间的距离。

提示:

可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。

参照本章例15

(3)定义盒子Box类,要求具有以下成员:

可设置盒子形状;可计算盒子体积;可计算盒子的表面积。

#include

classBox

{intx,y,z;intv,s;

public:

vo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1