C++练习题.docx

上传人:b****8 文档编号:10340452 上传时间:2023-02-10 格式:DOCX 页数:17 大小:20.46KB
下载 相关 举报
C++练习题.docx_第1页
第1页 / 共17页
C++练习题.docx_第2页
第2页 / 共17页
C++练习题.docx_第3页
第3页 / 共17页
C++练习题.docx_第4页
第4页 / 共17页
C++练习题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C++练习题.docx

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

C++练习题.docx

C++练习题

C++练习题

(1)

班级姓名学号

一、概念填空题

1.1类定义的关键字是class。

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

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

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

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

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

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

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

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

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

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

1.5析构函数在对象撤销时被自动调用。

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

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

二、简答题

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

答:

现实世界每个个体有特征与行为,这些特征与方法抽象概括成为更高级的存在,如女人与男人可概括抽象为人类,人与动物概括抽象为生物等等…而女人与男人,人与动物分别是人类与生物的具体对象,有共同的地方,但也有差别,如女人与男人的性别,身体特征…

对象与类正是这种男人、女人与人类的概括抽象关系,类派的属性与方法,是对象的概括和抽象没有具体实现,但类声明的对象是类的具体实例,有各自的具体属性与方法,如汽车类创建的,奥迪q7,奥迪a4,不仅颜色不一样,连重量与车型也有差别。

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

答:

封装性具体是指类对属性与方法的隐藏,在类的外部,尽管可以创建对象实例,但对其本身的属性与方法有不同的访问权限,不能直接访问某部分属性与方法,必须通过类的接口实现对属性与方法的访问。

总的来说,封装性指对属性和方法的隐藏,唯有通过其提供的借口才能够访问。

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

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

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

答:

引用是对实体的间接操作,不存在另外的内存,且可以改变实体的内容,但前提是引用具有实体。

所以引用做参数时,对引用的操作可以看做对实体的操作,即实现了两个实参之间的数据交换。

引用做参数时,实参是实体,但实参是引用后,引用是没有内存的,即不可以作为实体,所以对应实参不能为引用。

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

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

答:

默认的构造函数指没有用户自定义的构造函数时,系统提供的无参,没有函数体的只用来创建对象的构造函数。

默认的构造函数只有一个。

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

答:

友元函数不属于类的成员函数,即不可以直接访问对象的成员,必须通过对象来进行访问,但特殊的,与成员函数一样,对象的成员对其没有访问限制。

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:

:

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.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;

}

5,7

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<

}

5

10

3

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);

}

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

#include

usingnamespacestd;

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;

}

 

voidTimedate:

:

display()

{

cout<<"time:

"<

"<

"<

}

 

voidmain()

{

Timedatetimedate;

timedate.setTimedate(Y1992,Jan,33,12,9,9);

timedate.display();

}

//5.2Date.cpp

#include

usingnamespacestd;

classDate

{

intyear,month,day;

public:

voiddisplay();

voidsetTate();

intinputDay();

voidsetDay(intdays);

intisLeapyear();

};

voidDate:

:

display()

{

cout<

}

voidDate:

:

setTate()

{

cout<<"InputDate(year,month,day):

";

cin>>year>>month>>day;

}

intDate:

:

inputDay()

{

intdays;

cout<<"Afterdays:

";

cin>>days;

returndays;

}

voidDate:

:

setDay(intdays)

{

intflag=0;

day=day+days;

if(isLeapyear())

flag=1;

while(day>28)

{

if(month%2!

=0&&month<8||month%2==0&&month>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)

{

if(day<=30)

break;

else

{

day=day-30;

month=month+1;

}

}

elseif(month=2)

{

if(flag=1)

{

if(day<=29)

break;

else

{

day=day-28;

month=month+1;

}

}

}

else

break;

}

}

 

intDate:

:

isLeapyear()

{

if(year%400==0||year%100!

=0&&year%4==0)

return1;

else

return0;

}

voidmain()

{

Datedate;

date.setTate();

date.display();

date.setDay(date.inputDay());

date.display();

}

//5.3Circle.cpp

#include

usingnamespacestd;

constdoublePI=3.14156;

classCircle

{

doubleradius,circumference,area;

public:

Circle(double);

Circle(constCircle&);

//doubleoutputRadius();

voiddisplay();

};

Circle:

:

Circle(doubler=0)

{

radius=r;

area=PI*radius*radius;

circumference=2*PI*radius;

}

Circle:

:

Circle(constCircle&circl)

{

radius=circl.radius;

area=circl.area;

circumference=circl.circumference;

}

voidCircle:

:

display()

{

cout<<"radius="<

cout<<"area="<

cout<<"circumference="<

}

voidmain()

{

doubler;

cin>>r;

Circlecircle(r);

circle.display();

}

 

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

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

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

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