c++类与对象练习题.docx

上传人:b****6 文档编号:7560159 上传时间:2023-01-25 格式:DOCX 页数:23 大小:21.84KB
下载 相关 举报
c++类与对象练习题.docx_第1页
第1页 / 共23页
c++类与对象练习题.docx_第2页
第2页 / 共23页
c++类与对象练习题.docx_第3页
第3页 / 共23页
c++类与对象练习题.docx_第4页
第4页 / 共23页
c++类与对象练习题.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

c++类与对象练习题.docx

《c++类与对象练习题.docx》由会员分享,可在线阅读,更多相关《c++类与对象练习题.docx(23页珍藏版)》请在冰豆网上搜索。

c++类与对象练习题.docx

c++类与对象练习题

1.概念填空题

1.1类定义的关键字是class。

类的数据成员通常指定为私有成员。

类的函数成员通常指定为公有成员,指定为公有的类成员可以在类对象所在域中的任何位置访问它们,类的私有和保护只能被该类的成员函数或友元函数访问。

1.2类的访问限定符包括public、private和protected。

类成员默认的访问方式是private。

访问限定符在类中无先后次序,各限定符允许(允许/不允许)多次出现。

1.3构造函数的任务是建立对象。

类中可以有多个构造函数,它们由参数区分。

如果类说明中没有给出构造函数,则C++编译器会提供构造函数,该函数不完成(完成/不完成)对象初始化工作。

1.4复制构造函数的参数是对象的复制,当程序没有给出复制构造函数时,编译系统会提供默认复制构造函数,完成类对象的复制。

复制构造函数被调用情况有3种。

1.5析构函数在对象释放时被自动调用。

类中没有定义析构函数时,编译系统会提供一个默认的析构函数。

该函数不完成(完成/不完成)具体对象的清理工作。

2.简答题

2.1为什么说类与对象的概念是客观世界的反映?

2.2简单解释什么是面向对象程序设计的封装性。

2.3引用作为函数参数时为什么能实现两个实参之间的数据交换?

为什么对应实参不能为引用?

为什么返回值为引用的函数可以作为左值?

2.4什么是默认的构造函数?

默认的构造函数可以有多少个?

2.5复制构造函数用于哪3个方面?

2.6为什么在友元函数的函数体访问对象成员时,必须用对象名加运算符”.”再加对象成员名?

2.7类的静态数据成员与函数中的静态成员有何异同?

2.8类的成员函数在什么情况下应该定义为私有的?

这样做的目的是什么?

2.9友元关系有何性质?

友元关系的优点和缺点各有哪些?

3.选择题

3.1数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是(B)。

A.类B.对象C.函数体D.数据块

3.2类的实例化是指(B)。

A.定义类B.创建类的对象C.指明具体类D.调用类的成员

3.3下列说法中正确的是(B)。

A.类定义中只能说明函数成员的函数头,不能定义函数体

B.类中的函数成员可以在类体中定义,也可以在类体之外定义

C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中

D.在类体之外定义的函数成员不能操作该类的私有数据成员

3.4有如下类定义:

classsample{

intn;

public:

sample(inti=0):

n(i){}

voidsetValue(intn0);

};

下列关于setValue成员函数的实现中,正确的是(B)。

A.sample:

:

setValue(intn0){n=n0;}

B.voidsample:

:

setValue(intn0){n=n0;}

C.voidsetValue(intn0){n=n0;}

D.setValue(intn0){n=n0;}

3.5在下面的类定义中,错误的语句是(C)。

classsample{

public:

sample(intval);//①

~sample();//②

private:

inta=2.5;//③

public:

sample();//④

};

A.①B.②C.③D.④

3.6类的构造函数被自动调用执行的情况是在创建该类的(C)。

A.成员函数时B.数据成员时

C.对象时D.友元函数时

3.7(A)是析构函数的特征。

A.一个类中只能定义一个析构函数

B.析构函数名与类名不同

C.析构函数的定义只能在类体

D.析构函数可以有一个或多个参数

3.8在下列函数原型中,可以作为类AA构造函数的是(D)。

A.voidAA(int);B.intAA();

C.AA(int)const;D.AA(int)

3.9关于成员函数特征的下述描述中,(A)是错误的。

A.成员函数一定是联函数

B.成员函数可以重载

C.成员函数可以设置参数的默认值

D.成员函数可以是静态的

3.10不属于成员函数的是(B)。

A.静态成员函数B.友元函数

C.构造函数D.析构函数

3.11已知类A是类B的友元,类B是类C的友元,则(d)。

A.类A一定是类C的友元

B.类C一定是类A的友元

C.类C的成员函数可以访问类B的对象的任何成员

D.类A的成员函数可以访问类B的对象的任何成员

3.12有如下类定义:

classAA{

inta;

public:

intgetRef()const{return&a;}//①返回类型为int,return&a为地址

intgetValue()const{returna;}//②

voidset(intn)const{a=n;}//③常函数不能修改成员

friendvoidshow(AAaa)const{cout<

};

其中的四个函数定义中正确的是(B)。

A.①B.②C.③D.④

3.13有如下类定义:

classTest{

public:

Test(){a=0;c=0;}//①常成员必须在初始化列表中初始化

intf(inta)const{this->a=a;}//②常函数不能修改成员

voidh(intb){Test:

:

b=b;};//③

staticintg(){returna;}//④静态函数要通过对象访问成员

private:

inta;

staticintb;

constintc;

};

intTest:

:

b=0;

在标注的行中,能被正确编译的是(C)。

A.①B.②C.③D.④

4写出程序程序执行结果。

4.1#include

usingnamespacestd;

classTest{

public:

Test(){n+=2;}

~Test(){n-=3;}

staticintgetNum(){returnn;}

private:

staticintn;

};

intTest:

:

n=1;

intmain(){

Test*p=newTest;

deletep;

cout<<”n=”<

:

getNum()<

return0;

}

n=0

4.2#include

usingnamespacestd;

classAA{

intn;

public:

AA(intk):

n(k){}

intget(){returnn;}

intget()const{returnn+1;}

};

intmain(){

AAa(5);

constAAb(6);

cout<

return0;

}

57

4.3#include

usingnamespacestd;

classMyClass{

public:

intnumber;

voidset(inti);

};

intnumber=3;

voidMyClass:

:

set(inti){

number=i;

}

voidmain(){

MyClassmy1;

intnumber=10;

my1.set(5);

cout<

my1.set(number);

cout<

my1.set(:

:

number);

cout<

}

5103

4.4#include

usingnamespacestd;

classTest{

private:

staticintval;inta;

public:

staticintfunc();

voidsfunc(Test&r);

};

intTest:

:

val=200;

intTest:

:

func(){

returnval++;

}

voidTest:

:

sfunc(Test&r){

r.a=125;

cout<<"Result3="<

}

voidmain(){

cout<<"Result1="<

:

func()<

Testa;

cout<<"Result2="<

a.sfunc(a);125

}

Result1=200

Result2=201

Result1==125

5.编程题

5.1构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月用枚举类型,并完成测试(包括用成员函数和用普通函数)。

#include

#include

#include

enumYR{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005};//枚举名必须是标识符

enumMT{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};

classTimedate{

private:

YRyear;

MTmonth;

intdate;

inthh;

intmm;

intss;

public:

Timedate(){year=Y2000;month=Jan;date=1;hh=0;mm=0;ss=0;}

Timedate(YRa,MTb,intc){

year=a;

month=b;

date=c;

hh=12;mm=30;ss=0;

}

voidgetdate(YR&,MT&,int&);//体会用引用的优点,一次可返回3个值

voidgettime(int&,int&,int&);

voidputdate(YR,MT,int);

voidputtime(int,int,int);

voidlist();

};

voidTimedate:

:

getdate(YR&y,MT&m,int&d){

y=year;

m=month;

d=date;

}

voidTimedate:

:

gettime(int&a,int&b,int&c){

a=hh;

b=mm;

c=ss;

}

voidTimedate:

:

putdate(YRa,MTb,intc){

year=a;

month=b;

date=c;

}

voidTimedate:

:

puttime(inta,intb,intc){

hh=a;

mm=b;

ss=c;

}

voidTimedate:

:

list(){//成员函数

cout<<"year/month/date:

";

switch(year){

caseY2000:

cout<<"2000";break;

caseY2001:

cout<<"2001";break;

caseY2002:

cout<<"2002";break;

caseY2003:

cout<<"2003";break;

caseY2004:

cout<<"2004";break;

caseY2005:

cout<<"2005";break;

}

switch(month){//,,,,,,,,

caseJan:

cout<<'/'<<"Jan";break;

caseFeb:

cout<<'/'<<"Feb";break;

caseMar:

cout<<'/'<<"Mar";break;

caseApr:

cout<<'/'<<"Apr";break;

caseMay:

cout<<'/'<<"May";break;

caseJun:

cout<<'/'<<"Jun";break;

caseJul:

cout<<'/'<<"Jul";break;

caseAug:

cout<<'/'<<"Aug";break;

caseSep:

cout<<'/'<<"Sep";break;

caseOct:

cout<<'/'<<"Oct";break;

caseNov:

cout<<'/'<<"Nov";break;

caseDec:

cout<<'/'<<"Dec";break;

}

cout<<'/'<

cout<<"hour:

minite:

second:

";

cout<

'<

'<

}

voidshow(Timedate&td){//普通函数,体会两者的不同

YRyear;

MTmonth;

intdate,hh,mm,ss;

td.getdate(year,month,date);

td.gettime(hh,mm,ss);

cout<<"year/month/date:

";

switch(year){

caseY2000:

cout<<"2000";break;

caseY2001:

cout<<"2001";break;

caseY2002:

cout<<"2002";break;

caseY2003:

cout<<"2003";break;

caseY2004:

cout<<"2004";break;

caseY2005:

cout<<"2005";break;

}

switch(month){//,,,,,,,,

caseJan:

cout<<'/'<<"Jan";break;

caseFeb:

cout<<'/'<<"Feb";break;

caseMar:

cout<<'/'<<"Mar";break;

caseApr:

cout<<'/'<<"Apr";break;

caseMay:

cout<<'/'<<"May";break;

caseJun:

cout<<'/'<<"Jun";break;

caseJul:

cout<<'/'<<"Jul";break;

caseAug:

cout<<'/'<<"Aug";break;

caseSep:

cout<<'/'<<"Sep";break;

caseOct:

cout<<'/'<<"Oct";break;

caseNov:

cout<<'/'<<"Nov";break;

caseDec:

cout<<'/'<<"Dec";break;

}

cout<<'/'<

cout<<"hour:

minite:

second:

";

cout<

'<

'<

}

intmain(intargc,char*argv[]){

TimedateA(Y2004,Mar,3),B;

A.list();

B.list();

B.putdate(Y2005,Oct,18);

B.puttime(17,30,00);

B.list();

show(B);

return0;

}

5.2定义一个日期类Date,具有年月日等数据成员,显示日期、加减天数等函数成员。

注意需要考虑闰年。

#include

usingnamespacestd;

classDate{

intyear,month,day;

staticconstintdays[];

boolLeapYear();

boolEndofMonth();

public:

Date(int=1900,int=1,int=1);

voidIncrement(int);

voidDecrement(int);

voidSetDate(int,int,int);

voidPrint();

};

constintDate:

:

days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

Date:

:

Date(inty,intm,intd){

SetDate(y,m,d);

}

voidDate:

:

SetDate(inty,intm,intd){

year=(y>=1900&&y<=9999)?

y:

1900;

month=(m>=1&&m<=12)?

m:

1;

if(month==2&&LeapYear())

day=(d>=1&&d<=29)?

d:

1;

else

day=(d>=1&&d<=days[month])?

d:

1;

}

boolDate:

:

LeapYear(){

return((year%400==0)||(year%4==0&&year%100!

=0))?

true:

false;

}

boolDate:

:

EndofMonth(){

if(month==2&&LeapYear())

returnday==29;

else

returnday==days[month];

}

voidDate:

:

Increment(intn){

inti;

for(i=1;i<=n;i++)

if(EndofMonth()&&month==12){

year++;month=day=1;

}

elseif(EndofMonth()){

month++;day=1;

}

else

day++;

}

voidDate:

:

Decrement(intn){

inti;

for(i=1;i<=n;i++)

if(day==1){

if(month==1){

year--;month=12;day=31;

}

elseif(month==3){

day=LeapYear()?

29:

28;month=2;

}

else

day=days[--month];

}

else

day--;

}

voidDate:

:

Print(){

cout<

}

voidmain(){

Dated1(2005,1,4),d2(2004,12,27);

d1.Print();

d1.Decrement(4);

d1.Print();

d2.Print();

d2.Increment(70);

d2.Print();

}

5.3定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。

要求定义构造函数(以半径为参数,默认值为0,周长和面积在构造函数中生成)和复制构造函数。

#include

constdoublePI=3.1415;

usingnamespacestd;

classCircle{

doubleradius,length,area;

public:

Circle(doubler=0){

setr(r);

length=2*PI*radius;

area=PI*radius*radius;

}

Circle(Circle&c){

radius=c.radius;

length=c.length;

area=c.area;

}

voidprint(){

cout<<"radius="<

cout<<"length="<

cout<<"area="<

}

voidsetr(doubler){

radius=r;

}

};

intmain(){

Circlec1(10),c2(c1);

c1.print();

c2.print();

return0;

}

5.4设计一个学校在册人员类(Person)。

数据成员包括号(IdPerson)、(Name)、性别(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。

成员函数包括人员信息的录入和显示,还包括构造函数与复制构造函数。

设计一个合适的初始值。

#include

#include

constdoublePI=3.1415;

usingnamespacestd;

structdate{

intyear,month,day;

};

classPerson{

charID[12];

charName[10];

charSex[3];

dateBirth;

charHomeAdd[20];

public:

Person(){

ID[0]=Name[0]=Sex[0]=HomeAdd[0]=0;

Birth.year=Birth.month=Birth.day=0;

}

Person(charid[],charname[],charsex[],datebirth,charhomeadd[]){

strcpy(ID,id);

strcpy(Name,name);

strcpy(Sex,sex);

Birth=birth;

strcpy(HomeAdd,homeadd);

}

Person(Person&p){

strcpy(ID,p.ID);

strcpy(Name,p.Name);

strcpy(Sex,p.Sex);

Birth=p.Birth;

strcpy(HomeAdd,p.HomeAdd);

}

voidsetID(charid[]){

strcpy(ID,id);

}

voidsetName(cha

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

当前位置:首页 > PPT模板 > 自然景观

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

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