c++复习题.docx

上传人:b****2 文档编号:2988887 上传时间:2023-05-05 格式:DOCX 页数:22 大小:22.95KB
下载 相关 举报
c++复习题.docx_第1页
第1页 / 共22页
c++复习题.docx_第2页
第2页 / 共22页
c++复习题.docx_第3页
第3页 / 共22页
c++复习题.docx_第4页
第4页 / 共22页
c++复习题.docx_第5页
第5页 / 共22页
c++复习题.docx_第6页
第6页 / 共22页
c++复习题.docx_第7页
第7页 / 共22页
c++复习题.docx_第8页
第8页 / 共22页
c++复习题.docx_第9页
第9页 / 共22页
c++复习题.docx_第10页
第10页 / 共22页
c++复习题.docx_第11页
第11页 / 共22页
c++复习题.docx_第12页
第12页 / 共22页
c++复习题.docx_第13页
第13页 / 共22页
c++复习题.docx_第14页
第14页 / 共22页
c++复习题.docx_第15页
第15页 / 共22页
c++复习题.docx_第16页
第16页 / 共22页
c++复习题.docx_第17页
第17页 / 共22页
c++复习题.docx_第18页
第18页 / 共22页
c++复习题.docx_第19页
第19页 / 共22页
c++复习题.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c++复习题.docx

《c++复习题.docx》由会员分享,可在线阅读,更多相关《c++复习题.docx(22页珍藏版)》请在冰点文库上搜索。

c++复习题.docx

c++复习题

一、判断题

1.C++程序中,不得使用没有定义或说明的变量。

()

2.C和C++都是面向对象的。

()

3.对象实际上是功能相对独立的一段程序。

()

4.包含有纯虚函数的类称为抽象类。

()

5.函数定义voidswap(A&x)中的形式参数是一个变量的地址。

()

6.C++提供了string类型。

()

7.析构函数不能设置默认参数。

()

8.静态成员函数只能直接访问该类的静态数据成员。

()

9.用成员函数重载运算符所需的参数个数总比它的操作数少一个。

()

10.在C++的输入输出系统中,最核心的对象是流。

()

11.在面向对象程序设计中,类通过消息与外界发生关系。

()

12.引用是某个变量或对象的别名,建立引用时要对它初始化。

()

13.当用类的一个对象去初始化该类的另一个对象时,该类的拷贝构造函数会被自动调用。

()

14.拷贝构造函数可以被显示调用。

()

15.一个类的析构函数只能有一个。

()

16.私有派生时,基类的public成员仍被继承为派生类的public成员。

()

17.设类Counter有私有变量x,它的构造函数Counter(inta){x=a;},则对象声明“Counterc1(3);”定义了三个Counter类的对象。

()

18.静态成员函数不能访问静态数据成员。

()

19.类中有函数声明:

“friendvoidf(A&x);”,则函数f只能访问该类的公有成员。

()

20.重载“[]”运算符函数可以带多个参数。

()

二、填空题

1.面向对象程序设计方法具有抽象性、封闭性、继承性和等特点。

2.声明内联函数的关键字是。

3.C++有值传递和传递两种参数传递机制。

4.运算符用于动态内存分配,运算符用于释放动态分配的内存。

5.如果类A继承了类B,则类A称为类,类B称为类。

6.在C++中,要实现动态联编,必须使用基类指针调用。

7.具有纯虚函数的类称为。

8.定义模板的关键字是。

9.虚基类的作用是解决问题。

10.假定ABC是一个类,由“ABCa[5],b(3)”创建对象时该类的构造函数被调用了

次。

11.面向对象程序设计方法,程序可表示为程序=_______________。

12.面向对象程序设计着重于_________的设计。

13.在创建对象时,使用类作为样板,故称对象为类的____________。

14.声明内联函数的关键字是__________

15.要求一个变量在程序运行期间其值不能改变,在声明时要用的修饰符是___________。

16.________是一种参数化的多态性工具,可以为逻辑功能相同而类型不同的程序提供代码共享机制。

17.动态联编所支持的多态性称为___________的多态性。

18.使用C++风格的输入输出,在程序中必须包含头文件____________。

19.默认的继承方式为_________继承方式。

20.C++有值传递和________传递两种参数传递机制。

21.控制格式输出的操纵符中,()是设置数据精度的,()是设置十六进制的。

22.如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为____。

23.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+4’的值为____。

24.数组与函数参数联系密切,当用数组元素作函数参数时,这是属于值传递;当数组名作为参数时,这是属于传递,对形参的改变可影响到实参。

25.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为的成员;若要访问其他成员变量,需要通过函数或友元函数函数。

26.一个______和_______的关系,正如基本数据类型与该类型的变量一个。

27.类成员的默认访问方式是______.

28.一个类有_____个构造函数,有_____析构函数。

29.类的_______成员函数不能对类中的非静态成员进行默认访问。

30.如果说明类B是类A的友元类,则类B的所有成员函数都是类A的______。

31.利用成员函数对二元运算符重载,其左操作数为   ,右操作数为   。

32.类有两种用法:

一种是类的实例化,即生成类的______;另一种是通过_______派生出新的类。

33.运算函数中的关键字是______,它和运算符一起组成该运算符函数的函数名。

34.如果一个类中有一个或多个纯虚函数,则这个类称为______。

35.文件的打开是通过通过使用类________的成员函数________来实现的。

36.设所有变量均为整型,则表达式(e=2,f=5,e++,f++,e+f)的值为____。

37.已知c的ASCII码为十进制数99,设k为字符型变量,则表达式k=‘c’+1的值为________。

38.函数的形参在未被调用之前分配空间,函数的形参的要和实参的相同。

39.类的成员分为数据成员和_______。

40.类完成了面向对象程序设计的_____特性。

三、单项选择题

1.下面说法法中错误的是()

A、C语言是C++的一个子集B、C语言和C++是兼容的

C、C和C++都是面向对象的D、C++对C语言进行了一些改进

2.函数没有返回值时,应该选择的函数类型是()

A、intB、floatC、voidD、任意类型

3.在类定义的外部,可以被任意函数访问的成员是()

A、所在类成员B、private类成员

C、public类成员D、protected类成员

4.有关类的说法不正确的是()

A、类是一种用户自定义的数据类型

B、在类中,不做权限说明的数据变量是私有的

C、在类中,不做权限说明的数据变量是公有的

D、类的友元函数可以访问类的私有数据成员

5.类的析构函数被调用的时刻是()

A、释放对象B、引用对象

C、创建类D、创建对象

6.引入虚基类的目的是为了解决()

A、静态联编问题B、二义性问题

C、浅拷贝问题D、封装性问题

7.关于this指针正确的说法是()

A、this指针必须显示说明

B、友元函数拥有this指针

C、当创建一个对象后,this指针就指向该对象

D、静态成员函数拥有this指针

8.下列中不能重载的运算符是()

A、[]B、+C、=D、?

:

9.派生类的的对象可以访问它的基类成员中的()

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

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

10.定义模板的关键字是()

A、templateB、classC、staticD、public

11.面向对象程序设计着重于()的设计

A、对象B、类C、算法D、代码

12.如果一个函数的功能不太复杂,但要被频繁调用应选用()

A、重载函数B、内联函数C、递归函数D、友元函数

13.以下不属于类访问权限的是()

A、privateB、staticC、publicD、protected

14.有关类的说法不正确的是()

A、类是一种用户自定义的数据类型

B、在类中,不做权限说明的数据变量是公有的

C、在类中,不做权限说明的数据变量是私有的

D、可以不定义类的拷贝构造函数

15.下面关于成员函数的说法中不正确的是()

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

B、成员函数可以重载

C、成员函数可以无返回值

D、成员函数可以设定参数的默认值

16.下面关于构造函数的说法中不正确的是()

A、构造函数可以有参数,所以也可以有返回值

B、系统可以提供默认的构造函数

C、一个类可以有多个构造函数

D、构造函数可以设置默认参数

17.关于this指针正确的说法是()

A、this指针必须显示说明

B、友元函数拥有this指针

C、当创建一个对象后,this指针就指向该对象

D、静态成员函数拥有this指针

18.对delete运算符的下列描述中,错误的是()

A、用它可以释放用new运算符创建的对象和数组

B、用它释放一个对象时,它作用于一个new所返回的指针

C、用它可以一次释放多次用new运算符创建的多个对象

D、用它释放一个对象数组时,它用的指针名前须加下标运算符

19.可以访问类对象的私有数据成员的是()

A、公有派生类的成员函数B、该类的友元类派生的成员函数

C、其它类的公有函数D、该类的友元函数

20.一个类的析构函数有()

A、任意多个B、4个C、2个D、1个

21.C++源文件的扩展名为()。

A.cppB.cC.txtD.exe

22.在C++语言中,()的陈述是正确的。

A.能使用关键字并区分大小写B.能使用关键字并不区分大小写

C.不能使用关键字并区分大小写D.不能使用关键字并不区分大小写

23.运算符+、=、*、>=中,优先级最高的运算符是()。

A.+B.=C.*D.>=

24.下列不合法的变量名为()。

A.intB.int1C.name_1D.name0

25.已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&!

y)的值是()。

A.0B.语法错C.1D.“假”

26.以下不正确的是()。

A.语句for(i=0;;i++)表示无限循环B.for(;;)表示无限循环

C.for()也表示无限循环D.while

(1)表示无限循环

27.在函数的返回值类型与返回值表达式的类型的描述中,错误的是()。

A.函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的

B.函数返回值的类型就是返回值表达式的类型

C.函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成返回值类型

D.函数返回值类型决定了返回值表达式的类型

28.如果一个函数无返回值,定义时它的函数类型应是()。

A.任意B.intC.voidD.无

29.在C++语言中,关于参数默认值的描述正确的是()。

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

B.设置参数默认值时,应当从右向左设置

C.设置参数默认值时,应当全部设置

D.设置参数默认值后,调用函数不能再对参数赋值

30.若有以下定义,则说法错误的是()。

inta=100,*p=&a;

A.声明变量p,其中*表示p是一个指针变量

B.变量p经初始化,获得变量a的地址

C.变量p只可以指向一个整形变量

D.变量p的值为100

31.列关于结构体的说法错误的是()。

A.结构体是由用户自定义的一种数据类型

B.结构体中可设定若干个不同数据类型的成员

C.结构体中成员的数据类型可以是另一个已定义的结构体

D.在定义结构体时,可以为成员设置默认值

32.下列有关类的说法不正确的是()。

A.?

对象是类的一个实例

B.?

任何一个对象只能属于一个具体的类

C.?

一个类只能有一个对象

D.类与对象的关系和数据类型与变量的关系相似

33.()的功能是对象进行初始化。

A.析构函数B.数据成员C.构造函数D.静态成员函数

34.关于友元的描述中,()是错误的。

A.?

友元函数是成员函数,它被说明在类体内

B.?

?

友元函数可直接访问类中的私有成员

C.?

?

友元函数破坏封装性,使用时尽量少用

D.?

?

友元类中的所有成员函数都是友元函数

35.了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。

A.publicB.protectedC.privateD.static

36.派生类的对象对它的()是可以访问的。

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

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

37.多继承派生类构造函数构造对象时,()被最先调用。

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

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

38.C++类体系中,不能被派生类继承的有()。

A.构造函数B.虚函数C.静态成员函数D.赋值操作函数

39.编译时的多态性可以通过使用()获得。

A.虚函数和指针B.重载函数和析构函数

C.虚函数和对象D.虚函数和引用

40.下列描述中,()是抽象类的特征。

A.可以说明虚函数B.可以进行构造函数重载

C.可以定义友元函数D.不能说明其对象

四、找出并改正以下程序段中的错误

1.如下的程序输出25(有3处错误)。

usingnamespacestd;

intmain()

{

int*p=newint();

cout<

deletep;

return0;

}

2、下面程序输出“a=4b=5c=6”,找出并改正其中的错误(有7处错误)。

#include

usingnamespacestd;

classBase1

{

public:

Base1(){a=x;}

voidshowa(){cout<<"a="<

private:

inta;

};

classBase2

{

voidBase2(intx){b=x;}

voidshowb(){cout<<"b="<

private:

intb;

};

classDer:

publicBase2

{

public:

Der(inti,intj,intk):

Base1(i)

voidshowc(){cout<<"c="<

private:

intc;

};

voidmain()

{

Derobj;

obj.showa();

obj.showb();

obj.showc();

return0;

}

1.下面程序定义一个点类Point,输出内容为一个点的坐标“(3,4)”。

(有4处错误)

usingnamespacestd;

classPoint

{

public:

Point(int,int);

voiddisplayxy();

private:

intX,Y;

};

voidPoint:

:

Point(intx,inty)

{

X=x;

Y=y;

}

voidPoint:

:

displayxy()

{

cout<<"("<

}

intmain()

{

Pointp;

cout<<"("<

return0;

}

2.如下程序建立一个分数类,并具有下述功能:

①防止分母为0;②避免分母为负;③重载运算符“*”完成分数的乘法运算。

(有6处错误)

#include

#include

classFraction

{

Fraction(intx=0,inty=0);//声明带默认值的构造函数

voidprint();

Fractionoperator(Fraction&n1,Fraction&n2);

private:

intn,m;//n为分子,m为分母

};

Fraction(intx,inty)

{

if(y==0)

{

cout<<"Azeromisinvalid"<

exit

(1);

}

n=x;m=y;

if(m<0){m=-m;}//避免分母为负

}

voidFraction:

:

print()

{

cout<

}

Fractionoperator*(Fraction&n1,Fraction&n2)

{

Fractiontemp;

temp.m=n1.m*n2.m;

temp.n=n1.n*n2.n;

returntemp;

}

intmain()

{

Fractionr1(2,3),r2(3,-5),r;

r=r1*r2;

cout<<"r1*r2=";r.print();

return0;

}

五、写出以下程序段运行的结果

1.分析下面的程序,特别注意构造函数与析构函数的自动调用,写出运行结果。

#include

usingnamespacestd;

classcounter

{

private:

intvalue;

public:

counter(void);

~counter(void);

voidinc(void){value++;}

intgetvalue(void){returnvalue;}

};

counter:

:

counter(void)

{

value=0;

cout<<"counterinitialized\n";

}

counter:

:

~counter(void)

{

cout<<"counterdestroyed\n";

}

intmain(void)

{

counterc1,c2;

c1.inc();

cout<<"c1="<

return0;

}

2.阅读下面的程序。

①画出各个类的DAG图;②根据DAG图写出程序的输出结果。

#include

usingnamespacestd;

classB1

{

public:

B1(){cout<<"constructingB1"<

};

classB2

{

public:

B2(){cout<<"constructingB2"<

};

classD1:

publicB2,virtualpublicB1

{

public:

D1(){cout<<"constructingD1"<

};

classD2:

publicB2,virtualpublicB1

{

public:

D2(){cout<<"constructingD2"<

};

classD12:

publicD1,virtualpublicD2

{

public:

D12(){cout<<"constructingD12"<

};

intmain()

{

D12obj;

return0;

}

3.分析下面构造函数与析构函数的调用,写出运行结果。

#include

usingnamespacestd;

classPoint

{

public:

Point(int,int);

voiddisplayxy();

~Point();

private:

intX,Y;

};

//点类的实现部分

Point:

:

Point(intx,inty)

{

X=x;Y=y;

cout<<"Constructor";

displayxy();

}

voidPoint:

:

displayxy()

{

cout<<"("<

}

Point:

:

~Point()

{

cout<<"Destructor";

displayxy();

}

intmain()

{

Pointp2(3,4),p1(1,2);

return0;

}

4.阅读下面的程序。

①画出各个类的DAG图;②根据DAG图写出程序的输出结果。

#include

usingnamespacestd;

classB1

{

public:

B1(){cout<<"constructingB1"<

};

classB2

{

public:

B2(){cout<<"constructingB2"<

};

classD1:

publicB2,virtualpublicB1

{

public:

D1(){cout<<"constructingD1"<

};

classD2:

publicB2,virtualpublicB1

{

public:

D2(){cout<<"constructingD2"<

};

classD12:

publicD1,virtualpublicD2

{

public:

D12(){cout<<"constructingD12"<

};

intmain()

{

D12obj;

return0;

}

5.

#include

classBase

{

public:

virtualvoidshow(){cout<<"Base:

:

show()"<

};

classDerived1:

publicBase

{

public:

voidshow(){cout<<"Derived1:

:

show()"<

};

classDerived2:

publicDerived1

{

public:

voidshow(){cout<<"Derived2:

:

show()"<

};

voidmain()

{

Baseb;

Derived1d1;

Derived2d2;

Base*ptr[3]={&b,&d1,&d2};

for(inti=0;i<3;i++)

ptr[i]->show();

}

6.去掉上题(即第5小题)程序中的“virtual”关键字,运行结果如何?

六、编程

1.声明一个Rectangle(矩形)类,有数据成员width(宽)和height(高),有求面积的成员函数area()。

创建一个Rectangle的对象进行测试。

2.定义一个triangle(三角形)类,重载运算符“>”,使之用于两个三角形面积大小的比较。

并写一个main()函数测试它。

3.写一个求两个数据的最大值的函数模板,并利用它分别求出3和4、’a’和’b’、”photo”和”shop”等三组不同类型的数据的最大值。

4.定义一个三角形类triangle,

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2