C++第二学期期末考试复习资料(考试题全部来源于此)

更新时间:2024-06-08 05:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++期末复习

1、虚函数________。 A、可实现静态多态性

B、既可实现静态多态性,又可实现动态多态性 C、不能实现多态性 D、可实现动态多态性 答案:D

2、类中定义的成员,其隐含访问权限为________。 A、public B、private C、static D、protected 答案:B

3、以下有关对象的叙述中,不正确的是________。 A、撤消对象时必定要调用析构函数 B、对象被保护,其私有成员不能任意访问 C、产生对象时必定要调用构造函数 D、对象可以没有构造函数或析构函数 答案:D

4、下列说法中不正确的是________。

A、类与对象间的关系和数据类型与变量间的关系相类似 B、对象是类的一个实例 C、一个类只能有一个对象 D、任何一个对象只能属于一个类 答案:C

5、下列说法正确的是________。

A、一个类的构造函数可以对它的间接基类的构造函数传递实参。

B、多重继承中基类构造函数的调用顺序与初始化成员列表中构造函数顺序完全相同。 C、派生类的初始化成员列表可以为空。

D、如果派生类包含对象成员,则编译器调用构造函数的顺序为:对象成员、基类、派生类。 答案:C

6、下列说法中不正确的是________。

A、一个对象数组中的所有数组元素属于同一个类

B、当在类的外部定义成员函数时,必须在函数名前加上类名和作用域运算符”::” C、同一个类的两个对象占用相同的内存空间 D、要在类的外部直接使用类中的私有成员是错误的 答案:C

7、类的析构函数的作用是________。 A、对象的初始化 B、删除对象 C、类的初始化 D、一般成员函数 答案:B

8、以下有关静态数据成员的描述正确的是________。 A、静态数据成员不能被成员函数调用 B、静态数据成员为该类所有对象所共有 C、静态数据成员要在构造函数内初始化 D、静态数据成员必须为公有的 答案:B

9、关于成员函数的定义和使用,下面的说明________是错误的。 A、必须通过对象调用成员函数 B、成员函数可以定义在类外

C、只有成员函数能访问类的数据成员 D、成员函数内可以访问类的所有数据成员 答案:C

10、以下说法不正确的是________。

A、在类的定义体中,决定成员访问权限的关键字private、public和protected在类体内出现的次序是一定的,且只能出现一次 B、类的公有成员函数是类与外界的接口 C、在类中不能对所定义的数据成员进行初始化 D、类的实现机制实现了数据隐藏 答案:A

11、一个类的静态数据成员所表示的属性________。 A、仅是该类对象的属性 B、是该类或该类对象的属性 C、是该类和该类友元的属性 D、仅是该类的属性 答案:D

12、下列叙述中不正确的是________。 A、含纯虚函数的类为抽象类 B、抽象类不能作为派生类的基类 C、纯虚函数没有其函数的实现部分 D、不能直接由抽象类建立对象 答案:B

13、下列说明有关构造函数的正确说法是________。 A、可定义没有构造函数的类 B、构造函数不能重载 C、任一类必定有构造函数 D、任一类必定有缺省的构造函数 答案:C

14、设类B是基类A的派生类,并有语句”A al,*pa=&a1;B b1,*pb=&b1; ”,则正确的语句是________。 A、a1=b1; B、pb=pa; C、*pb=*pa; D、b1=a1; 答案:A

15、假定AB为一个类,则该类的拷贝构造函数的声明语句为________。 A、AB(AB* x);

B、AB(AB x); C、AB&(AB x); D、AB(AB&); 答案:D

16、对于一个C++的类,________。 A、可有多个构造函数和一个析构函数 B、只能有一个构造函数和一个析构函数 C、可有多个构造函数和多个析构函数 D、可有一个构造函数和多个析构函数 答案:A

17、一个类的析构函数________。 A、只能是缺省的 B、允许重载 C、至多可有两个 D、是唯一的 答案:D

18、下列说法不正确的是________。 A、类实质上是一种数据类型

B、在类中,成员的默认访问权限是私有的 C、类封装了数据和操作

D、在类的定义中,必须包含private、public、protected三种存取方式对应的部分 答案:D

19、下面哪一个不是构造函数的特征________。 A、构造函数没有类型

B、构造函数的函数名与类名相同 C、构造函数不能重载

D、构造函数可以设置缺省参数 答案:C

20、下列有关类的构造函数和析构函数的说法中,不正确的是________。 A、定义一个类时可以不显式的定义析构函数 B、定义一个类时可以不显式的定义构造函数 C、类的构造函数可以重载 D、类的析构函数可以重载 答案:D

21、结构中定义的成员,其隐含访问权限为________。 A、public B、private C、static D、protected 答案:A

22、下列说明中有关结构体定义的正确说法是________。 A、其成员缺省的权限为公有的 B、不能指定其成员的权限 C、不能包含成员函数

D、不能包含对象成员 答案:A

23、以下说法不正确的是________。 A、类中的数据成员不能为指针类型

B、当使用指针变量访问类的成员时,必须先使指针变量指向该类的某个对象 C、程序中可以定义指向某个类的指针变量 D、可以定义指向类中某个数据成员的指针变量 答案:A

24、以下关于运算符重载的叙述正确的是________。 A、运算符重载时可改变其实现的功能 B、C++已有的任何运算符都可以重载 C、可以重载C++中没有的运算符 D、运算符重载时可改变其优先级 答案:A

25、以下关于运行时的多态性的叙述中,不正确的是________。 A、运行时的多态性是在编译时确定其要执行的函数

B、运行时的多态性是在执行过程中根据具体被操作的对象来确定要运行的函数 C、运行时的多态性要通过指向基类的指针来实现 D、运行时的多态性要通过虚函数来实现 答案:A

26、下列有关类和对象的说明中,正确的是________。

A、对象是类的实例,为对象分配存储空间而不为类分配存储空间 B、类与对象没有区别

C、要为类和对象分配存储空间

D、类是对象的实例,为类分配存储空间而不为对象分配存储空间 答案:A

27、若A为某个类的类名,执行语句“A a[5];“后,系统自动调用该类的构造函数的次数为________。5 28、函数重载属于两种多态性中的哪一种:__________。答案:静态多态

29、无论哪一种继承权限,其基类的________成员均不能为派生类所继承。答案:私有

30、已定义类A,该类构造函数的参数都没有缺省值。执行语句:\(*p3)[3]=a3, *p4=new A[3];\后,系统自动调用该类的缺省(无参)构造函数的次数为________。答案:13 30、C++语言提供的__________机制允许一个派生类继承多个基类,即使这些基类是相互无关的。答案:继承

31、 在定义一个类时,缺省的构造函数是唯一的。当自定义的构造函数的每一个参数均有缺省值或__________时,这种构造函数是确省的构造函数。答案:无参

32、设P是指向一个类动态对象的指针变量,则执行语句”delete P;”时,将自动调用该类的______________。答案:析构函数 33、声明虚函数的方法是在基类中的成员函数原型前加上关键字__________,并在派生类中重新实现该成员函数。答案:virtual 34、以下程序输出的第一行是________,第二行是________。 # include class X { public:

void virtual f(){cout<<\ void virtual g(){cout<<\ };

class A: public X { public:

void f(){cout<<\ };

class B: public A { public:

void f(){cout<<\ void g(int i=0){cout<<\ };

void main(void) {

B b;X *px=&b; px->f();px->g(); }

答案:B::44 B::55

34、下以程序输出的第二行是________,第三行是________。 # include class E {

int x;static int y; public:

E(int a){x=a;y+=x;}

void Show(){cout<

int E::y=100; void main(void) {

E e1(10); e1.Show();

E e2(50); e2.Show(); e1.Show(); }

答案:50 160 10 160

35、如果类A继承类B,则类A称之为__________,类B称之为__________。 答案:子类 【或】 派生类 基类 【或】 父类

36、以下程序输出的第一行是_____________,第二行是_____________。 #include class A { int x,y; public:

A(int i, int j){x=i; y=j;} operator++(); operator++(int)

{

cout<

A::operator++() {

cout<<++x<<' '<<++y<<'\\n'; }

void main() {

A a(1,2); ++a; a++; }

答案:空 1:2 3 2 3

37、以下程序输出结果的第一行是________,第二行是________。 # include class X {

public: virtual void f(){ cout <<\ }; class Y: public X {

public: void f(){cout<<\ };

void main(void) {

Y y,*xy=&y;X *xp=&y; xy ->f(); xp->f(); }

答案:bb bb 38、阅读以下程序。 #include class Char { private: char c1,c2; public:

void convert(char a) { c2=(c1=a)-32; }

void disp() { cout<

void main() {

Char a,b;

a.convert('m'); a.disp(); b.convert('n'); b.disp();

}

执行结果第一行为________________,第二行为________________。 答案:m转换为M n转换为N

39、多态性分为两种:_____________(编译时多态)和_____________(运行时多态)。 答案:静态多态 动态多态

40、程序输出的第一行是________,第二行是________。 # include class Ba { int y; public: int x;

Ba(int b){x=b;y=x+x;} int Gety(void){return y;} };

class A: public Ba { public:

A(int c):Ba(c){}

int Getx(void){return x;} };

class B:public Ba { public:

B(int d):Ba(d){} int Getx(){return x;} };

class C:public B, public A { public:

C(int e):A(e+30),B(e+100){ } };

void main(void) { C c(100);

cout <

答案:260 400 130 200

41、以下程序输出的第一行是_______,第二行是________。 # include class Shape { public:

Shape( ){}

virtual float Area( )=0; };

class Circle:public Shape { float r; public;

Circle(float c){r=c;} float Area(){return 3*r*r;} };

class Rectangle:public Shape { float h,w; public:

Rectangle(float c,float d){h=c;w=d;} float Area(){return h * w;} };

void fun(Shape * s) {cout<Area()<<'\\n';} void main(void) {

Circle c(4); fun(&c); Rectangle r(5,2); fun(&r); }

答案:48 10

42、以下程序输出结果的第一行是__________,第二行是__________。 # include class X {

public: void f(){ cout <<\};

class Y: public X {

public: void f(){cout<<\};

void main(void) {

Y y , *xy=&y ; X *xp=&y ; xy ->f() ; xp->f() ; }

答案:bb aa

43、私有派生中,基类中的public成员在派生类中是________成员,protected成员在派生类中是________成员。

答案:private :private

44、以下程序输出的第二行是________,第四行是________。 # include class A { int i; public:

static int count; A(int a =0) {

i=a+count;

count++; cout<

int A::count=0; void main(void) { A a(100); A b; A c(200);

cout<<\}

答案:2 1 count=3

45、保护派生中,基类中的public成员在派生类中是________成员,protected成员在派生类中是________成员。 答案:protected 【或】 保护 protected 【或】 保护

46、以下程序输出的第一行是________,第二行是________,第三行是________。 # include class T{public:static int x ; }; int T::x=1; void main(void) {

T a,b;a.x=10;b.x=20;

cout<<\ }

答案:a.x=20 【或】 20 b.x=20 【或】 20 T::x=20 【或】 20

46、继承权限有三种:________派生、________派生、________派生。 答案:公有 私有 保护

47、以下程序输出的第一行是________,第二行是________,第三行是________,第四行是________。 #include #include class Base {

char str[20];

public:

Base(char *s=\ {

strcpy(str,s); cout<

class h1:public virtual Base {

char str1[20]; public:

h1(char *s1,char *s2):Base(s1) {

strcpy(str1,s2); cout<

class h2:virtual public Base {

char str2[20]; public:

h2(char *s1,char *s2):Base(s1) {

strcpy(str2,s2); cout<

class h3:public h1,public h2 {

char str3[20]; public:

h3(char *s1,char *s2,char *s3,char *s4):h1(s1,s2),h2(s1,s3) {

strcpy(str3,s4); cout<

void main() {

h3 a(\}

答案:default h1 h2 h3

48、通过重载运算符\,直接实现两个一维数组对应元素相加的运算。设数组a、b分别为int a[10]={1,2,3,4,5,6,7,8,9,10},int b[10]={4,5,6,7,8,9,10,11,12,13},则两数组相加后,结果为{5,7,9,11,13,15,17,19,21,23}。类似地,重载运算符\,实现复合赋值运算。

# include class Arr {

class XA{ int x; public: XA(int n) {x=n;}

};

class XB: public XA{

int y;

public: XB(int a,int b);

};

在构造函数XB的下列定义中,正确的是(B)。 A.XB::XB(int a,int b):x(a),y(b){ } B.XB::XB(int a,int b):XA(a),y(b) { } C.XB::XB(int a,int b):x(a),XB(b){ } D.XB::XB(int a,int b):XA(a),XB(b){ } 3.10有如下程序: #include using namespace std; class Base{ private:

void fun1( ) const {cout<<”fun1”;} protected:

void fun2( ) const {cout<<”fun2”;}

public: void fun3( ) const {cout<<”fun3”;}

};

class Derived : protected Base{ public: void fun4( ) const {cout<<”fun4”;} };

int main(){ Derived obj; obj.fun1( ); //① obj.fun2( ); //② obj.fun3( ); //③ obj.fun4( ); //④

}

其中没有语法错误的语句是(D )。

A.①

B.②

C.③

4.写出程序运行结果 4.l#include using namespace std; class B1{ public:

D.④

};

B1(int i){ ~B1( ){

cout<<”constructing B1 “<

class B2 { public: };

class C:public B2, virtual public B1 { int j; public:

C(int a,int b,int c):B1(a),memberB1(b) ,j(c){} B2( ){ cout<<”constructing B3 *”<

cout<<”destructing B3”<

private: };

int main( ){ }

constructing B1 1 constructing B3 * constructing B1 2 constructing B3 * destructing B3 destructing B1 destructing B3 destructing B1

4.2#include using namespace std; class B{ public: };

class D:public B{ public: };

void f(B& rb){ }

int main( ){

D d;

B b,&rb1=b,&rb2=d; rb.f1();

void f1(){cout<<\void f1(){cout<<\C obj(1,2,3); B1 memberB1; B2 memberB2;

}

f(rb1); return 0;

f(rb2);

B::f1 B::f1

5.编程题

5.1定义一个Point类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area()。 #include using namespace std; const double PI=3.14159; class Point { public:

Point(double x=0, double y=0) {X=x;Y=y;}

void ShowPoint() {cout<<\

private: };

class Rectangle: public Point { public:

Rectangle(double w,double h,double x,double y):Point(x,y) {width=w,height=h;Area();} void Area() {area= width*height;} void ShowArea(){ }

cout<<\double X,Y;

private: };

class Circle: public Point { public:

Circle(double r,double x, double y):Point(x,y) {radius=r;Area();}

void Area() {area= PI*radius*radius;} void ShowArea(){ }

cout<<\double width,height,area;

private: };

int main(){

Rectangle r(10,8,0,0); Circle c(4,3,5); r.ShowArea(); c.ShowArea(); double radius,area;

}

return 0;

5.2设计一个建筑物类Building,由它派生出教学楼Teach-Building和宿舍楼类Dorm-Building,前者包括教学楼编号、层数、教室数、总面积等基本信息,后者包括宿舍楼编号、层数、宿舍数、总面积和容纳学生总人数等基本信息。 #include #include using namespace std; enum AMPM{AM=1,PM}; class Building{ public:

Building(char *); void ShowBuilding(){ }

cout<

protected: };

Building::Building(char *name){ };

class Teach_Building: public Building { public:

Teach_Building(char *,int,int,int,int); void ShowTeach_Building(){ }

Building::ShowBuilding(); cout<<\cout<<\

cout<<\cout<<\strcpy(Name,name); char Name[30];

protected: };

Teach_Building::Teach_Building(char *name,int no,int fl,int cr,int ar):Building(name){ }

class Dorm_Building:public Building { public:

Dorm_Building(char *,int,int,int,int,int); void ShowDorm_Building(){

Building::ShowBuilding(); cout<<\cout<<\

No=no;Floors=fl;ClassRooms=cr;Area=ar; int No,Floors,ClassRooms,Area;

}

cout<<\cout<<\

cout<<\

protected: };

Dorm_Building:: Dorm_Building(char *name,int no,int fl,int dr,int ar,int sn):Building(name){ }

int main(){ }

5.3定义并描述一个Table类和一个Circle类,由它们共同派生出RoundTable类。 (这题做得不太满意) #include using namespace std; class Table{ public:

Table(int legs){ }

Legs=legs;

Teach_Building tb(\主教学楼\Dorm_Building db(\北苑男生宿舍\tb.ShowTeach_Building(); db.ShowDorm_Building(); return 0;

No=no;Floors=fl;DormRooms=dr;Area=ar;StudentNum=sn; int No,Floors,DormRooms,Area,StudentNum;

protected: };

class Circle{ public:

Circle(int radius){ }

Radius=radius; int Legs;

protected: };

class RoundTable:public Table,public Circle{ public:

RoundTable(int legs,int radius):Table(legs),Circle(radius){} int Radius;

protected: };

3、编写一个程序实现小型公司的工资管理。该公司主要有4类人员:经理(main-ager)、技术人员(technician)、销售员(salesman)、销售经理(salesmanager)。这些人员都是职员(employee),有编号、姓名、月工资信息。月工资的计算方法是:经理固定月薪8000元,技术人员每小时100元,销售员按当月销售额4%提成,销售经理既拿固定月工资5000元也拿销售提成,销售提成为所管辖部门当月销售额的5‰。要求编程计算职员的月工资并显示全部信息。

2、定义一个学生类,其中有3 个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main 函数使用这个类,实现对学生数据的赋值和输出。

7、声明一个Tree(树)类,有成员ages(树龄),成员函数grow(int years)用以对ages 加上years,showage( )用以显示tree对象的ages值。在主函数中定义Tree类对象,并调用成员函数(学生自行指定实参数

11、定义一个抽象类shape用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。

2、定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。

18、编写一个矩形rectangle类,有数据成员长len和宽wid,构造函数retange(int,int).和友元函数 int area(rectangle T)和int fun(rectangle T) 分别计算给定长方形的周长和面积。 #include using namespace std; class rectangle { public:

rectangle(int ,int );

friend int area(rectangle T); friend int fun (rectangle T); private: int len,wid; };

rectangle::rectangle(int a, int b) { len=a; wid=b; }

int area(rectangle T) {

return (T.len*T.wid); }

int fun(rectangle T) {

return (2*(T.len+T.wid)); }

int main() {

rectangle R(20,30);

cout<<\面积:\cout<<\周长:\return 0; }

1、声明一个类String1,其数据成员为char head[100],构造函数String(char *Head)实现head的初始化,成员函数void Reverse()实现head内字符串的逆序存放,成员函数void Print()实现head内字符串的输出。

23、定义盒子Box 类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。

33、声明一个哺乳动物Mammal 类,再由此派生出狗Dog 类,声明一个Dog 类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。

25、定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。

27、实现一个名为SimpleCircle的简单圆类,其数据成员int *itsRadius为一个指向其半径值的指针,设计对数据成员的各种操作,给出这个类的完整实现并测试这个类。

28、有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。(提示:重载单目运算符++)

29、有一个学生类student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:大于等于90:优;80~90:良;70~79:中;60~69:及格;小于60:不及格。

32、有两个长方柱,其长、宽、高分别为: (1)12,20,25;(2)10,14,20。求它们的体积。编一个基于对象的程序,在类中用带参数的构造函数。

本文来源:https://www.bwwdw.com/article/mat6.html

Top