c++类与对象练习题Word文件下载.docx
- 文档编号:19911329
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:23
- 大小:22.13KB
c++类与对象练习题Word文件下载.docx
《c++类与对象练习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++类与对象练习题Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
};
以下关于setValue成员函数的实现中,正确的选项是〔B〕。
A.sample:
:
setValue(intn0){n=n0;
}
B.voidsample:
C.voidsetValue(intn0){n=n0;
D.setValue(intn0){n=n0;
3.5在下面的类定义中,错误的语句是〔C〕。
classsample{
sample(intval);
//①
~sample();
//②
private:
inta=2.5;
//③
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;
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写出程序程序执行结果。
#include<
iostream>
usingnamespacestd;
classTest{
Test(){n+=2;
}
~Test(){n-=3;
staticintgetNum(){returnn;
staticintn;
n=1;
intmain(){
Test*p=newTest;
deletep;
cout<
”n=”<
Test:
getNum()<
endl;
return0;
n=0
classAA{
AA(intk):
n(k){}
intget(){returnn;
intget()const{returnn+1;
AAa(5);
constAAb(6);
a.get()<
”,”<
b.get();
57
4.3#include<
classMyClass{
intnumber;
voidset(inti);
intnumber=3;
voidMyClass:
set(inti){
number=i;
voidmain(){
MyClassmy1;
intnumber=10;
my1.set(5);
my1.number<
5
my1.set(number);
10
my1.set(:
number);
my1.number;
5103
4.4#include<
staticintval;
staticintfunc();
voidsfunc(Test&
r);
val=200;
func(){
returnval++;
voidTest:
sfunc(Test&
r){
r.a=125;
"
Result3="
r.a<
Result1="
func()<
200
Testa;
Result2="
a.func()<
201
a.sfunc(a);
125
Result1=200
Result2=201
Result1==125
5.编程题
5.1构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月用枚举类型,并完成测试(包括用成员函数和用普通函数)。
#include<
iostream.h>
conio.h>
iomanip.h>
enumYR{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005};
//枚举名必须是标识符
enumMT{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
classTimedate{
YRyear;
MTmonth;
intdate;
inthh;
intmm;
intss;
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;
voidgetdate(YR&
MT&
int&
);
//体会用引用的优点,一次可返回3个值
voidgettime(int&
voidputdate(YR,MT,int);
voidputtime(int,int,int);
voidlist();
voidTimedate:
getdate(YR&
y,MT&
m,int&
d){
y=year;
m=month;
d=date;
gettime(int&
a,int&
b,int&
c){
a=hh;
b=mm;
c=ss;
putdate(YRa,MTb,intc){
year=a;
month=b;
date=c;
puttime(inta,intb,intc){
hh=a;
mm=b;
ss=c;
list(){//成员函数
year/month/date:
;
switch(year){
caseY2000:
cout<
2000"
break;
caseY2001:
2001"
caseY2002:
2002"
caseY2003:
2003"
caseY2004:
2004"
caseY2005:
2005"
switch(month){//,,,,,,,,
caseJan:
'
/'
Jan"
caseFeb:
Feb"
caseMar:
Mar"
caseApr:
Apr"
caseMay:
May"
caseJun:
Jun"
caseJul:
Jul"
caseAug:
Aug"
caseSep:
Sep"
caseOct:
Oct"
caseNov:
Nov"
caseDec:
Dec"
date<
hour:
minite:
second:
hh<
mm<
ss<
voidshow(Timedate&
td){//普通函数,体会两者的不同
intdate,hh,mm,ss;
td.getdate(year,month,date);
td.gettime(hh,mm,ss);
intmain(intargc,char*argv[]){
TimedateA(Y2004,Mar,3),B;
A.list();
B.list();
B.putdate(Y2005,Oct,18);
B.puttime(17,30,00);
show(B);
5.2定义一个日期类Date,具有年月日等数据成员,显示日期、加减天数等函数成员。
注意需要考虑闰年。
classDate{
intyear,month,day;
staticconstintdays[];
boolLeapYear();
boolEndofMonth();
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>
d<
=29)?
d:
else
=days[month])?
boolDate:
LeapYear(){
return((year%400==0)||(year%4==0&
year%100!
=0))?
true:
false;
EndofMonth(){
returnday==29;
returnday==days[month];
Increment(intn){
inti;
for(i=1;
i<
=n;
i++)
if(EndofMonth()&
month==12){
year++;
month=day=1;
elseif(EndofMonth()){
month++;
day=1;
day++;
Decrement(intn){
if(day==1){
if(month==1){
year--;
month=12;
day=31;
}
elseif(month==3){
day=LeapYear()?
29:
28;
month=2;
else
day=days[--month];
day--;
Print(){
year<
-"
month<
day<
voidmain(){
Dated1(2005,1,4),d2(2004,12,27);
d1.Print();
d1.Decrement(4);
d2.Print();
d2.Increment(70);
5.3定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。
要求定义构造函数(以半径为参数,默认值为0,周长和面积在构造函数中生成)和复制构造函数。
constdoublePI=3.1415;
classCircle{
doubleradius,length,area;
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="
radius<
length="
length<
area="
area<
voidsetr(doubler){
radius=r;
intmain(){
Circlec1(10),c2(c1);
c1.print();
c2.print();
5.4设计一个学校在册人员类(Person)。
数据成员包括身份证号(IdPerson)、(Name)、性别(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。
成员函数包括人员信息的录入和显示,还包括构造函数与复制构造函数。
设计一个合适的初始值。
cstring>
structdate{
classPerson{
charID[12];
charName[10];
charSex[3];
dateBirth;
charHomeAdd[20];
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[]){
voidsetName(charn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 对象 练习题