C++练习题Word下载.docx
- 文档编号:6423319
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:17
- 大小:20.46KB
C++练习题Word下载.docx
《C++练习题Word下载.docx》由会员分享,可在线阅读,更多相关《C++练习题Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
友元函数不属于类的成员函数,即不可以直接访问对象的成员,必须通过对象来进行访问,但特殊的,与成员函数一样,对象的成员对其没有访问限制。
2.6类的静态数据成员与函数中的静态成员有何异同?
类的静态成员为所有的对象共享,可以直接或通过接口访问,且只有唯一内存。
函数的静态成员只在函数体内有效(局部变量),但其只作一次声明,每次进入该函数都保存上一次的操作,直到程序结束才释放内存。
2.7类的成员函数在什么情况下应该定义为私有的?
这样做的目的是什么?
类要创建对象必须调用构造函数,所以构造函数不能定义为私有,同理,析构函数也不能定义为私有,且类的接口函数不能为私有。
目的是为了阻止类外部对其的访问,保证了其的封装性。
2.8友元关系有何性质?
友元关系的优点和缺点各有哪些?
可以不受类的访问限制,它可以直接访问私有成员,方便了数据的数据的交换但破坏了类特有的封装性。
三、选择题
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:
C.voidsetValue(intn0){n=n0;
D.setValue(intn0){n=n0;
3.5在下面的类定义中,错误的语句是(C)。
public:
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
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.1写出下列程序的运行结果。
#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
4.2写出下列程序的运行结果。
usingnamespacestd;
classAA
intn;
AA(intk):
n(k){}
intget(){returnn;
intget()const{returnn+1;
AAa(5);
constAAb(6);
a.get()<
“,”<
b.get();
5,7
4.3写出下列程序的运行结果。
classMyClass
intnumber;
voidset(inti);
intnumber=3;
voidMyClass:
set(inti){number=i;
voidmain()
MyClassmy1;
intnumber=10;
my1.set(5);
my1.number<
my1.set(number);
my1.set(:
number);
my1.number;
5
10
3
4.4写出下列程序的运行结果。
staticintval;
staticintfunc();
voidsfunc(Test&
r);
val=200;
func(){returnval++;
voidTest:
sfunc(Test&
r)
r.a=125;
cout<
"
Result3="
r.a<
Result1="
func()<
Testa;
Result2="
a.func()<
a.sfunc(a);
Result1=200
Result2=201
Result3=125
五、编程题
5.1构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月用枚举类型,并完成测试(包括用成员函数和用普通函数)。
5.2定义一个日期类Date,具有年月日等数据成员,显示日期、加减天数等函数成员。
注意需要考虑闰年。
5.3定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。
要求定义构造函数(以半径为参数,默认值为0,周长和面积在构造函数中生成)和复制构造函数。
5.4设计一个学校在册人员类(Person)。
数据成员包括身份证号(IdPerson)、姓名(Name)、性别(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。
成员函数包括人员信息的录入和显示,还包括构造函数与复制构造函数。
设计一个合适的初始值。
5.5设计如下类:
(1)建立一个Point类,表示平面中的一个点;
建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;
建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。
(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制
(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。
5.6建立一个分数类Fraction。
分数类的数据成员包括分子和分母。
成员函数包括构造函数、复制构造函数。
构造函数要对初始化数据进行必要的检查(分母不能为0)。
将分数显示成“a/b”形式的输出函数。
成员函数包括约分、通分、加、减、乘、除、求倒数、比较大小、显示和输入。
完成以上所有成员函数并在主函数中进行检验。
//5.1Timedate.cpp
enumYear{Y1992,Y1993,Y1994,Y1995};
enumMonth{Jan,Feb,Mar,Apr,May,Jun};
classTimedate
{
Yearyear;
Monthmonth;
intday,hour,minute,second;
public:
voidsetTimedate(Year,Month,int,int,int,int);
voiddisplay();
voidTimedate:
setTimedate(Yeary,Monthm,intd,inth,intmi,ints)
year=y;
month=m;
day=d;
hour=h;
minute=mi;
second=s;
display()
time:
"
hour<
minute<
second<
voidmain()
Timedatetimedate;
timedate.setTimedate(Y1992,Jan,33,12,9,9);
timedate.display();
//5.2Date.cpp
classDate
intyear,month,day;
voidsetTate();
intinputDay();
voidsetDay(intdays);
intisLeapyear();
voidDate:
year<
年"
month<
月"
day<
日"
setTate()
InputDate(year,month,day):
;
cin>
>
year>
month>
day;
intDate:
inputDay()
intdays;
Afterdays:
days;
returndays;
setDay(intdays)
intflag=0;
day=day+days;
if(isLeapyear())
flag=1;
while(day>
28)
if(month%2!
=0&
&
8||month%2==0&
7)
{
if(day<
=31)
break;
else
{
day=day-31;
month=month+1;
if(month>
12)
{
month=month-12;
year=year+1;
}
}
}
elseif(month==4||month==6||month==9)
=30)
day=day-30;
elseif(month=2)
if(flag=1)
if(day<
=29)
break;
else
day=day-28;
month=month+1;
else
break;
isLeapyear()
if(year%400==0||year%100!
year%4==0)
return1;
else
return0;
Datedate;
date.setTate();
date.display();
date.setDay(date.inputDay());
//5.3Circle.cpp
constdoublePI=3.14156;
classCircle
doubleradius,circumference,area;
Circle(double);
Circle(constCircle&
);
//doubleoutputRadius();
Circle:
Circle(doubler=0)
radius=r;
area=PI*radius*radius;
circumference=2*PI*radius;
Circle(constCircle&
circl)
radius=circl.radius;
area=circl.area;
circumference=circl.circumference;
voidCircle:
radius="
radius<
area="
area<
circumference="
circumference<
doubler;
r;
Circlecircle(r);
circle.display();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 练习题