复习题部分参考.docx

上传人:b****9 文档编号:25653773 上传时间:2023-06-11 格式:DOCX 页数:18 大小:21.52KB
下载 相关 举报
复习题部分参考.docx_第1页
第1页 / 共18页
复习题部分参考.docx_第2页
第2页 / 共18页
复习题部分参考.docx_第3页
第3页 / 共18页
复习题部分参考.docx_第4页
第4页 / 共18页
复习题部分参考.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

复习题部分参考.docx

《复习题部分参考.docx》由会员分享,可在线阅读,更多相关《复习题部分参考.docx(18页珍藏版)》请在冰豆网上搜索。

复习题部分参考.docx

复习题部分参考

《C++程序设计》复习题

一.选择题

1.关于类定义格式的描述中,(D)是错的。

A.一般类的定义格式分为说明部分和实现部分

B.一般类中包含有数据成员和成员函数

C.类中成员有三种访问数据:

公有、私有和保护

D.成员函数都应是公有的,数据成员都应是私有的

2.( D)不是构造函数的特征。

A.构造函数的函数名与类名相同;B.构造函数可以重载;

C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。

3.在C++中,关于下列设置参数默认值的描述中,( C)是正确的。

A.不允许设置参数的默认值;

B.设置参数默认值只能在定义函数时设置;

C.设置参数默认值时,应该是先设置右边的,再设置左边的;

D.设置参数默认值时,应该全部参数都设置。

4.重载函数在调用时选择的依据中,( D)是错误的。

A.参数个数;B.参数的类型;C.函数名字;D.函数的类型。

5.在( C)情况下适宜采用inline定义内联函数。

A.函数体含有循环语句;B.函数体含有递归语句;

C.函数代码小,频繁调用;D.函数代码多,不常调用;

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

A.一个类中只能定义一个析构函数;B.析构函数名与类名不同;

C.析构函数的定义只能在类体内;D.析构函数可以有一个或多个参数;

7.定义析构函数时,应该注意(C )。

A.其函数名与类名完全相同;B.函数返回类型必须是void类型;

C.无形参,也不可重载;D.函数体中必须有delete语句;

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

A.成员函数一定是内联函数;B.成员函数可以重载;

C.成员函数可以设置缺省参数值;D.成员函数可以是静态的;

9.下列静态数据成员的特性中,(C )是错误的。

A.说明静态数据成员时前边要加修饰符static;B.静态数据成员要在类体外进行初始化;

C.静态数据成员不是所有对象所共用的;

D.引用静态数据成员时,要在其名称前加<类名>和作用域运算符;

10下面关于友元函数的描述正确的是(C)

 A.友元函数的实现必须在类的内部定义 B.友元函数是类的成员函数

 C.友元函数破坏了类的封装性和隐蔽性

 D.友元函数只能访问类的私有成员,不能访问公有和保护成员。

21main()函数可以访问派生类的对象中它的哪一类基类成员?

(A)

A.公有继承的基类的公有成员B.公有继承的基类的保护成员

C.公有继承的基类的私有成员D.保护继承的基类的公有成员

22可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D)。

A.私有继承的公有成员B.公有继承的私有成员

C.公有继承的保护成员D.公有继承的公有成员

23下面叙述不正确的是(A)。

A.基类的保护成员在派生类中仍然是保护的

B.基类的保护成员在公有派生类中仍然是保护的

C.基类的保护成员在私有派生类中仍然是私有的

D.对基类成员的访问必须是无二义性

24多继承派生类建立对象时,(B)被最先调用。

A.派生类自己的构造函数B.虚基类的构造函数

C.非虚基类的构造函数D.派生类中子对象类的构造函数

25设置虚基类的目的是(A)。

A.消除两义性B.简化程序C.提高运行效率D.减少目标代码

26抽象类应该含有(D)。

A.至多一个虚函数B.至多一个虚函数是纯虚函数

C.至少一个虚函数D.至少一个虚函数是纯虚函数

27、使用派生类的主要原因是(A

A.提高代码的可重用性

C.加强类的封装性

B.提高程序的运行效率

D.实现数据的隐藏

28.在C++中继承方式有几中(C)

A.1

B.2

C.3

D.4

29.派生类的对象对它的基类成员中(A)是可以访问的。

A.公有继承的公有成员;

C.公有继承的保护成员;

B.公有继承的私有成员;

D.私有继承的公有成员。

30.类中定义的成员默认为(B)访问属性。

A.PublicB.private

C.protectedD.friend

31.下列存储类标识符中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速

度,选用(A)合适。

A.内联函数;

B.重载函数;

C.递归调用;D.嵌套调用。

32.C++对C语言作了很多改进,下列描述中(D)使得C语言发生了质变,从面向过程变成了面向对象。

A.增加了一些新的运算符;

C.规定函数说明必须用原型;

B.允许函数重载,并允许设置缺省参数;

D.引进了类和对象的概念;

33、下列各种函数中,(C)不是类的成员函数。

A构造函数B析构函数

C友元函数

D拷贝构造函数

34、通常,拷贝构造函数的参数是(C)

A.某个对象名

B.某个对象的成员名

D.某个对象的指针名

C.某个对象的引用名

35.下面对静态数据成员的描述中,正确的是(C)

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

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

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

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

36.假定AB为一个类,则执行ABx;语句时将自动调用该类的(B)

A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值构造函数

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

A、成员函数一定是内联函数;

B、成员函数可以重载;

C、成员函数可以设置缺省参数值;D、成员函数可以是静态的;

38、在公有继承的情况下,基类成员在派生类中的访问权限(B)。

A、受限制

B、保持不变

C、受保护

D、不受保护

39、派生类的对象对它的基类成员中(A)是可以访问的。

A、公有继承的公有成员;B、公有继承的私有成员;

C、公有继承的保护成员;D、私有继承的公有成员;

40、在C++中,关于下列设置缺省参数值的描述中,(B)是正确的。

A、不允许设置缺省参数值;

B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;

C、只能在函数的定义性声明中指定参数的缺省值;

D、设置缺省参数值时,必须全部都设置;

11关于友元类的描述中,错误的是(C)

 A.友元类中的成员函数都是友元函数

 B.友元类被说明在一个类中,它与访问权限无关

 C.友元类是被定义在某个类中的嵌套类 

 D.如果Y是类X的友元,则类X不一定是类Y的友元

12友元在访问类的对象的成员时(D)。

 A)直接使用类的成员名              B)使用this指针指向成员名

 C)使用“类名:

:

成员名”的形式        D)使用“对象名.成员名”的形式

13如果类A被说明成类B的友元,则(D)。

A.类A的成员即类B的成员           

B.类B的成员即类A的成员

C.类A的成员函数不得访问类B的成员 

D.类B不一定是类A的友元

14下列各类函数中,(C)不是类的成员函数。

 A.构造函数 B.析构函数 C.友元函数 D.拷贝初始化构造函数

15类A是类B的友元,类B是类C的友元,则(D)。

 A.类B是类A的友元 B.类C是类A的友元C.类A是类C的友元 D.以上都不对

16.下列运算符中,(A)不能在C++中重载

A.?

:

B.[]C.newD.&&

17.下列运算符不能用友元函数重载的是(C)

A.+B.-C.*D.<<

18.关于运算符重载的下列描述中正确的是(B)

A.可改变优先级B.需保持原有的结合性

C.可改变操作数的个数D.可改变语法结构

19.为了满足运算符+的可交换性,必须将其重载为(D)

A.成员函数B.静态成员函数C.虚函数D.友元函数

20下列对派生类的描述中,(C)是错误的。

A.一个派生类可以作为另一个派生类的基类

B.派生类至少应有一个基类

C.基类中成员的访问权限被派生类继承后都不改变

D.派生类的成员除了自己定义的成员外,还包含了它的基类成员

二.判断正误

(1)函数参数个数和类型都相同,只是返回值类型不同,这不是重载函数。

(×)

(2)虚函数是为实现某种功能而假设的函数,派生类的虚函数定义影响其基类,而基类的虚函数定义不影响其派生类。

(×)

(3)可以在类的内部说明虚函数,这时就可以定义一个虚的内联函数。

(√)

(4)空的虚函数与纯虚函数都没有函数体,因此空的虚函数与纯虚函数在概念上是一样的,只是叫法不一样。

(×)

(5)只要基类的析构函数被说明为虚函数,则派生类的析构函数,无论是否使用virtual进行说明,都自动地成为虚构函数。

(√)

(6)虚函数是一种virtual说明的成员函数。

(√)

(7)抽象类中只能有一个纯虚函数。

(×)

(8)析构函数不能说明为虚函数。

(×)

(9)程序中可以说明抽象类的指针或引用,但是不能说明抽象类的对象。

(√)

三.填空题

1、在C++中,对于构造函数和析构函数来说,构造函数__是可以重载的,而析构函数是不可以重载的。

2、声明友元的关键字是___friend____。

3、派生类对基类的继承有三种方式:

_private______、__public_____和_protected______。

4、要想访问基类的private成员变量,只能通过基类提供的公有_函数__进行间接访问。

5、C++语言支持的两种多态性分别是编译时的多态性和_运行时__的多态性。

6、类的每一个成员函数(静态成员函数除外)都有一个隐含的参数,叫做_______。

假设类名为A,则该参数的类型为_______。

7、类的成员分为__数据成员__和_成员函数_。

8、如果一个类中有一个或多个纯虚函数,则这个类称为虚基类_。

9、静态数据成员在定义或说明时,前面要加上关键字_static___。

10、如果成员函数不需要访问类的_非静态_成员,则可以把它声明为静态成员函数。

11、面向对象程序设计的3大机制为:

_封装性_、_继承性_和多态性_。

12、30、如果类A继承了类B,则类A称为_派生类___,类B称为_基类___。

13、在类定义中,将=0置于虚函数的函数原型的末尾可以声明该函数为纯虚函数。

14、类的静态成员分为静态数据成员和静态成员函数。

15、面向对象程序设计的继承机制提供了重复利用程序资源的一种途径。

16、虚函数实现了C++的多态机制,类实现了C++的封装机制。

17、类中运算符重载一般采用两种形式:

_成员函数_和友元函数_

18、虚函数实现了C++的多态机制,类实现了C++的封装机制。

19、C++语言的头文件与源程序文件扩展名分别是(.h)和(.cpp)

20、类继承中,缺省的继承方式是(私有继承)

21、异常是通过检查__________,抛出(throw)和______来实现的。

22、类中运算符重载函数一般采用两种形式:

成员函数和________。

23、如果类A继承了类B,则类A称为派生类,类B称为_________。

24、C++标准输入流对象名为__________。

25、面向对象程序设计的3大机制为:

__________、_______和多态性。

四、写出程序运行结果

1.#include

classSample

{

public:

Sample();

Sample(int);

~Sample();

voiddisplay();

protected:

intx;

};

Sample:

:

Sample()

{

x=0;

cout<<"constructingnormally\n";

}

Sample:

:

Sample(intm)

{

x=m;

cout<<"constructingwithanumber:

"<

}

voidSample:

:

display()

{

cout<<"displayanumber:

"<

}

Sample:

:

~Sample()

{

cout<<"destructing\n";

}

voidmain()

{

Sampleobj1;//调用无参构造函数

Sampleobj2(20);//调用有一个参数的构造函数

obj1.display();//调用成员函数

obj2.display();

}//程序结束前调用析构函数

参考答案:

constructingnormally

constructingwithanumber:

20

displayanumber:

0

displayanumber:

20

destructing

destructing

2.#include

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

:

numer表示全局变量

cout<

}

参考答案:

5

10

3

3.#include

#include

classstudentid{

public:

studentid(intid=0){

value=id;

cout<<”Assigningstudentid”<

}

~studentid(){

cout<<”destructingid”<

}

protected:

intvalue;

};

classstudent

{

public:

student(char*pname=”noname”,intssid=0):

id(ssid)

{

cout<<”constructingstudent”<

strcpy(name,pname);

name[sizeof(name)-1]=’\0’;

}

~student()

{

cout<<”destructingstudent”<

}

protected:

charname[20];

studentidid;

};

voidmain(){

students(“randy”,9818);

}

参考答案:

Assigningstudentid9818

constructingstudentrandy

destructingstudent

destructingid9818

4.#include

classR

{

public:

R(intr1,intr2){R1=r1;R2=r2;}

voidprint();

voidprint()const;

private:

intR1,R2;

};

voidR:

:

print()

{

cout<

"<

}

voidR:

:

print()const

{

cout<

}

voidmain(){

Ra(5,4);

a.print();

constRb(20,52);

b.print();

}

参考答案:

5:

4

20;52

(5)#include

#include

classbase

{

char*p;

public:

base(intsz,char*bptr)

{

p=newchar[sz];

strcpy(p,bptr);

cout<<"constructorbase"<

}

virtual~base()

{

delete[]p;

cout<<"destructorbase\n";

}

};

classderive:

publicbase

{

char*pp;

public:

derive(intsz1,intsz2,char*bp,char*dptr):

base(sz1,bp)

{pp=newchar[sz2];

strcpy(pp,dptr);

cout<<"constructorderive"<

}

~derive()

{

delete[]pp;

cout<<"destructorderive\n";

}

};

voidmain()

{

base*px=newderive(5,7,"base","derive");

deletepx;

}

参考答案:

constructorbase

constructorderive

destructorderive

destructorbase

1、编一个程序,用重载函数实现针对若干个数据输出最小值。

要求包括2个同名函数,分别实现:

①对2个实数。

②对2个字符串。

2、编写一个car类,要求内含有:

私有数据成员轮胎数wheels,定义构造函数,定义返回轮胎数成员函数、定义输出欢迎信息函数等至少3个以上的成员函数。

ClassCar//定义类Car

{public:

voidmsg();//显示欢迎信息

intget_wheels();//返回汽车的车轮数量

voidset_wheels(int);//设置汽车的车轮数量

private:

intwheels;//汽车的车轮数量};

VoidCar:

:

welcomemsg()

{cout<<"Welcometothecarworld!

\n";}

VoidCar:

:

set_wheels(intn)

{wheels=n;}

IntCar:

:

get_wheels()

{returnwheels;}

解析:

其中,成员函数msg()显示一条欢迎信息“Welcometothecarworld!

”。

成员函数get_wheels()返回Car类的私有数据成员wheels。

成员函数set_wheels(int)用指定的形参初始化数据成员wheels。

3、声明一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义Speak()成员函数,基类中定义为虚函数。

声明一个Dog类的对象,调用Speak()函数,观察运行结果。

4、分别用成员函数和友元函数重载运算符,使对实型的运算符+、-、*、/适用于复数运算,使<<运算符适用于复数输出a+bi形式。

#include

Usingnamespacestd;

ClassComplex

{private:

Doublereal;

Doubleimag;

public:

Complex(doubler=0,doublei=0)

{real=r;imag=i;}

Friendostream&operator<<(ostream&,Complex&);

Complexoperator+(Complex&c2);

Complexoperator-(Complex&c2);

};

Ostream&operator<<(ostream&output,Complex&c)

{output<

if(c.imag>=0)

output<<"+";

output<

ComplexComplex:

:

operator+(Complex&c2)

{Complexc;

c.real=real+c2.real;

c.imag=imag+c2.imag;

returnc;}

5、声明一个Shape抽象类,在此基础上派生出Rectangle和Circle类,二者都有GetArea()函数计算对象的面积,GetPerim()函数计算对象的周长。

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

当前位置:首页 > 工程科技

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

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