admin 管理员组

文章数量: 887021


2023年12月17日发(作者:creating content)

语法扩充

1.1选择题

在C++中用 D 能够实现将参数值带回;

a数组 b指针 c引用 d上述ABC都可

考虑函数原型void testint a,int b=7,char ch="",下面的函数调用中,属于不合法调用的是:

C

Atest5 Btest5,8 Ctest6,"" Dtest0,0,"";

已知: int m=10;下列表示引用的方法中,正确的是: C

Aint &Z; Bint &t=10; Cint &X=m; Dfloat &f=&m;

下列不是函数重载所要求的条件是: D

A函数名相同 B参数个数不同

C参数类型不同 D函数返回值类型不同

在C++中执行以下4条语句后输出rad值为: C

static int hot=200;

int &rad=hot;

hot=hot+100;

cout<

A 0 B 100 C 300 D 200

系统在调用重载函数时,不能作为确定哪个重载函数被调用的依据是: D

A参数个数 B参数类型 C函数名称 D函数的返回值类型

对C++语言和C语言的兼容性,描述正确的是: A

AC++兼容C BC++部分兼容C CC++不兼容C DC兼容C++

在C++中使用流进行输入输出,其中用于屏幕输出的对象是: C

Acerr Bcin Ccout Dcfile

对使用关键字new所开辟的动态存储空间,释放时必须使用 C

Afree Bcreate Cdelete Drealse

在函数调用时,如某一默认参数要指明一个特定值,则有 A

A其之前所有参数都必须赋值 B其之后所有参数都必须赋值

C其前、后所有参数都必须赋值 D其前、后所有参数都不必赋值

下列哪个类型函数不适合声明为内联函数 A

A函数体语句较多 B函数体语句较少

C函数执行时间较短 D函数执行时间过长

int Funcint,int;不可与下列哪个函数构成重载 B

Aint Funcint,int,int; Bdouble Funcint,int;

Cdouble Funcdouble,double; Ddouble Funcint,double;

下面的哪个保留字不能作为函数的返回类型 C

Avoid Bint Cnew Dlong

一个函数功能不太复杂,但要求被频繁调用,选用 A ;

A. 内联函数 B. 重载函数 C. 递归函数 D. 嵌套函数

已知函数f的原型为:void f int&a,charb;变量s,t的定义是:int s;char t ="ABCD";

把s和t分别作为第一参数和第二参数来调用函数f,正确的调用语句是 C

A f&s,&t; B f&s,t; C fs,t; D fs,&t;

若定义cin>>str;

当输入

Microsoft Visual Studio 6.0

所得结果是str=B;

A、 Microsoft Visual Studio 6.0

B、 Microsoft

C、 Microsoft Visual

D、 Microsoft Visual Studio 6.0

.函数模板C;

A、代表某一具体函数

B、与模板函数是同一个函数

C、与某一个具体的数据类型连用

D、是模板函数实例化的结果

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

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

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

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

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

下列表示引用的方法中,A是正确的;

已知: k=1000;

A、int &x=k; B、char &y;

C、int &z=1000; D、float &t=&k;

有如下模板定义:

template T funT x,T y{return xx+yy;}

在下列对fun的调用中,错误的是: C

Afun2,8 Bfun2.0,8.2 Cfun2.3,8 Dfun ‘2’,’8’

通常情况下,函数模板中的类型参数个数不能是 A

A0个 B1个 C2个 D3个

1.2填空题

1、 假定有如下定义:int x;,若要将整型变量y定义为变量x的引用,则应使用的定义语句是_int &y=x;________;

具有相同函数名但具有不同参数表的函数称为 重载函数;'

2、 在进行函数调用时,将把参数的值传递给值参数,把参数的_地址_传递给引用参数;

3、 执行完下列三条语句后,指针变量c指向__b___;

Int a,b,c=&a;

int &p=c;

p=&b;

4、 假设有如下函数定义:void Funint x,int y=100;则语旬Fun5语句__ Fun5,100_等价;

5、 在一个C++程序中,每个变量都必须遵循__先定义后使用__的原则;

6、 下面是一个求数组元素之和的程序;主程序中定义并初始化了一个数组,然后计算该数组

各元素之和,并输出结果;

函数TotalSum 计算数组元素之和;请完成下列程序;

include

__

int Totalsumint array,int len__ ;

void main

{

int a5={2,3,6,8,10};

__int Total ___;

Total =Totalsuma,5;

cout<<"Sum of array:"<

}

int Totalsumint array,int len

{

____int sum =0____ ;

forint I=0;____I

____ sum += arrayI_____ ;

return sum;

}

7、 下面的函数Fun未使用中间变量实现了对两个数的交换,请完成下列函数的定义;

Void Fun int &x,int &y

{

x+ = y;

y =___x-y____ ;

__x = x - y_____ ;

}

8、 定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为__常量__,即在该形参声明的前面加上__const__关键字进行修饰;

9、 在一个函数的定义或声明前加上关键字__inline__时,该函数就声明为内联函数;

1.3简答题

A、.内联函数的含义

在函数前加上关键字inline说明了一个内联函数,这使一个函数在程序行里进行代码扩展而不被调用;这样的好处是减少了函数调用的开销,产生较快的执行速度;但是由于重复编码会产生较长代码,所以内联函数通常都非常小;如果一个函数在类说明中定义,则将自动转换成内联函数而无需用inline说明;

B、.函数重载的含义

在同一作用域范围内,相同的函数名通过不同的参数类型或参数个数可以定义几个函数,编译时编译器能够识别实参的个数和类型来决定该调用哪个具体函数;需要注意的是,如果两个函数仅仅返回类型不同,则编译时将会出错,因为返回类型不足以提供足够的信息以使编译程序判断该使用哪个函数;所以函数重载时必须是参数类型或者数量不同;

C、引用与指针的区别

D、内联函数使用上的限制

E、定义带默认参数值函数的规则

F、指针与常量的关系

1.4程序阅读题

1写出下列程序的运行结果;

include

void main

{

int x;

int &p=x;

x=10;

p=x+10;

cout<

}

结果:20,20

2写出下列程序的运行结果;

include

int fint a

{

return ++a;

}

int gint &a

{

return ++a;

}

void main

{

int m=0,n=0;

m+=fgm;

n+=ffn;

cout<<"m="<

cout<<"n="<

}

结果:

m=3

n=2

3 写出下列程序的运行结果;

include

void Fun

{

int num=20;

cout<<"The Fun's num is"<

}

void main

{

int num=10;

cout<<"The main's num is "<

Fun;

{

int num=30;

cout<<"The Field's num is "<

}

cout<<"The main's num is "<

}

结果:

The main's num is 10

The Fun's num is20

The Field's num is 30

The main's num is 10

类和对象

2.1选择题

下列的各类函数中,不是类的成员函数; C

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

作用域运算符“::”的功能是: B

A标识作用域的级别的 B指出作用域的范围的

C给定作用域的大小的 D标识成员是属于哪个类的

已知:print函数是一个类的常成员函数,它无返回值,下列表示中,是正确的;

Avoid printconst; Bconst void print;

Cvoid const print: Dvoid printconst;

在类定义的外部,可以被访问的成员有 C

A所有类成员 Bprivate的类成员

Cpublic的类成员 Dpublic或private的类成员

关于类和对象不正确的说法是: C

A类是一种类型,它封装了数据和操作 B对象是类的实例

C一个类的对象只有一个 D一个对象必属于某个类

在C++中实现封装是借助于 B

A枚举 B 类 C 数组 D函数

定义析构函数时,应该注意: C

A其名与类名完全相同 B返回类型是void类型

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

类clase CC1的说明如下,错误的语句是: A

clase CC1{

A

int a=2; //A

CC1; //B

public:

CC1int val; //C

~CC1; //D

};

类的指针成员的初始化是通过函数完成的,这个函数通常是: B

A析构函数 B 构造函数 C其它成员函数 D友元函数

关于构造函数的说法,不正确的是: A

A没有定义构造函数时,系统将不会调用它 B其名与类名完全相同

C它在对象被创建时由系统自动调用 D没有返回值

通常拷贝构造函数的参数是: C

A对象名 B对象的成员名 C对象的引用名 D对象的指针名

关于成员函数特征的描述中,错误的是: A

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

C成员函数可以设置参数的默认值 D成员函数可以是静态的

下列关于构造函数的描述中,错误的是: D

A构造函数可以设置默认参数; B构造函数在定义类对象时自动执行

C构造函数可以是内联函数; D构造函数不可以重载

有如下类声明“class A{int x; ……};”,则A类的成员x是: B

A公有数据成员 B私有数据成员 C公有成员函数 D私有成员函数

类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员一定是不允许的:

ATM a BTN & a CTM a DTN a;

以下关于this指针的叙述中正确的是: D

A任何与类相关的函数都有this指针; B类的成员函数都有this指针;

C类的友员函数都有this指针; D类的非静态成员函数才有this指针;

.关于类模板的说法正确的是: B

A类模板的主要作用是生成抽象类

B类模板实例化时,编译器将根据给出的模板实参生成一个类

C在类模板中的数据成员具有同样类型

D类模板中的成员函数没有返回值

.以下关键字不能用来声明类的访问权限的是: C

Apublic Bprivate Cstatic Dprotected

.类的私有成员可在何处访问 D

A通过子类的对象访问 B本类及子类的成员函数中

C通过该类对象访问 D本类的成员函数中

.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是: A

A编译器总是自动创建一个不带参数的构造函数 B这个类没有构造函数C这个类不需要构造函数 D该类不能通过编译

.一个类可包含析构函数的个数是: B

C

A0个 B1个 C0个或1个 D0个或多个

.一个类可包含构造函数的个数是: D

A0个 B0个或1个 C0个或多个 D1个或多个

.this指针存在的目的是: B

A保证基类公有成员在子类中可以被访问

B保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码

C保证基类保护成员在子类中可以被访问

D保证基类私有成员在子类中可以被访问

.下列关于类的权限的描述错误的是: A

A类本身的成员函数只能访问自身的私有成员

B类的对象只能访问该类的公有成员

C普通函数不能直接访问类的公有成员,必须通过对象访问

D一个类可以将另一个类的对象作为成员

.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是: B

AA类构造函数先执行 B成员构造函数先执行

C两者并行执行 D不能确定

.假定有类AB,有相应的构造函数定义,能正确执行“AB a4,b5, c3 ,

p2={&a,&b};”语句,请问执行完此语句后共调用该类构造函数的次数为 C

A3 B4 C5 D6

拷贝构造函数的作用是 C ;

A. 进行数据类型的转换 B. 用对象调用成员函数

C. 用对象初始化对象 D. 用一般类型的数据初始化对象

下列静态数据成员的特性中,错误的是 D ;

A.静态数据成员的声明以关键字static开头

B. 静态数据成员必须在文件作用域内初始化

C. 引导数据成员时,要在静态数据成员前加类名和作用域运算符

D. 静态数据成员不是类所有对象共享的

通过指针访问类对象成员的方法是 D ;

A. :: B. ; C. . D. ->

静态成员函数没有 B ;

A.返回值 B. this指针 C. 指针参数 D. 返回类型

在下列关键字中,用于说明类中公有成员的是 A ;

A.public; B.private; C.protected; D.friend

不是构造函数的特征 D ;

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

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

是析构函数的特征 A ;

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

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

关于成员函数特征的下述描述中, A 是错误的;

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

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

下述静态数据成员的特性中, D 是错误的;

A. 说明静态数据成员时前边要加修饰符static;

B. 静态数据成员要在类体外进行初始化;

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

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

2.2填空题

1、 在撤销类的对象时,C++程序将自动调用该对象的__析构___函数;

2、 类中的构造函数是一个特殊的成员函数,它由类的对象__自动_调用,它的作用是___为对象分配内存,数据成员初始化___;

3、 对类中的成员函数和属性的访问是通过__public__、__protected__和___private__这3个关键字来控制的;

4、 __delete__运算符删除new运算符所动态分配的内存空间;

5、 假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数形式为__MyClass__;

6、 类中构造函数有__一个或多__个,析构函数有___一___个;

7、 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的___数据成员___ ,共同行为被描述为类中的__成员函数__;

8、 若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句_friend class FriendClass;___;

9、 在结构定义中,数据和成员函数默认权限是__public__;在类定义中,数据和成员函数默认权限是__private___;

10、 在下面程序的横线处填上适当的语句,使类型该程序执行结果为10;

include

class MyClass

{

pub1ic:

___ MyClass int a {_x = a; }____//为x置值

__int GetNum{ return x; }______ //取x值

private:

int x;

};

void main

{

Myclass my10;

Cout<<<

}

11、 完成下面的类定义;

Class MyClass

{

public:

MyClass{x=0;}

____friend______int GetNum___MyClass ______my;

private:

int x;

};

int GetNum____MyClass ______my

{

___return my.x;

}

12、 __new__运算符对指定类型对象动态分配内存并返回该类型的__指针__;

13、 若要把函数void FriendFunction定义为类MyClass的友元函数,则应在类MyClass的定义中加入语句__friend void FriendFunction;_______;

14、 类的具体表现是通过定义_对象__来操作的;

15、 在定义类的对象时,C++程序将自动调用该对象的__构造___函数初始化对象自身;

16、 一般情况下,按照面向对象的要求,把类中的数据成员属性定义为__private__权限,而把成员函数方法定义为__public__权限;

17、 在类中定义和实现的函数称为_内联函数__;

18、 非成员函数应声明为类的__友元函数__才能访问这个类的private成员;

2.3简答题

A、类的含义

B、构造函数的特点

C、拷贝构造函数的调用

D、析构函数的定义及其特点

E、静态成员的分类及各自的特点

2.4程序阅读题

1 写出下列程序的运行结果;

include

class MyClass

{

char ch;

public:

MyClass;

MyClasschar character;

void Print;

~MyClass;

};

MyClass::MyClass

{

cout<<"This is a constructor"<

ch='a';

}

MyClass::MyClasschar character

{

cout<<"This is a constructor"<

ch=character;

}

void MyClass::Print

{

cout<<"The value of ch is "<

}

MyClass::~MyClass

{

cout<<"This is a destructor"<

}

void main

{

MyClass first,second'b';

;

;

}

运行结果:

This is a constructor

This is a constructor

The value of ch is a

The value of ch is b

This is a destructor

This is a destructor

2写出下列程序的运行结果

include

class MyClass

{

public:

MyClass;

void Print;

~MyClass;

private:

int I;

static int j;

};

int MyClass::j=0;

MyClass::MyClass

{

cout<<"This is constructor"<

j+=10;

}

void MyClass::Print

{

cout<<"The value of j is" <

}

MyClass::~MyClass

{

cout<<"This is a destructor"<

}

void main

{

MyClass first,second;

;

;

}

This is constructor

This is constructor

The value of j is20

The value of j is20

This is a destructor

This is a destructor

继承与派生

3.1选择题

.在C++中,类与类之间的继承关系具有 C

A自反性 B对称性 C传递性 D反对称性

.在公有继承的情况下,基类的成员私有的除外在派生类中的访问权限 B

A受限制 B保持不变 C受保护 D不受保护

.按解释中的要求在下列程序划线处填入的正确语句是: C

include

class Base{

public:

void fun{cout<<"Base::fun"<

};

class Derived:public Base{

public:

void fun

{ //在此空格处调用基类的函数fun

cout<<"Derived::fun"<

};

Afun; ; CBase::fun; DBase->fun;

.在保护继承的情况下,基类的成员私有的除外在派生类中的访问权限 C

A受限制 B保持不变 C受保护 D不受保护

.下面描述中,表达错误的是: B

A公有继承时,基类中的public成员在派生类中仍是public的

B公有继承时,基类中的private成员在派生类中仍是private的

C公有继承时,基类中的protected成员在派生类中仍是protected的

D私有继承时,基类中的public成员在派生类中是private的

.下列虚基类的声明中,正确的是: B

Aclass virtual B: public A Bclass B: virtual public A

Cclass B: public A virtual Dvirtual class B: public A

.C++设置虚基类的目的是 A

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

class X{

int a;

public:

Xint x=0{a=x;}

};

class Y:public X{

int b;

public :

Yint x=0,int y=0:Xy{ b=x;}

};

下列语句组中出现语法错误的是D

A. X pa=new Y1,2;

B.X a1=Y1,3;

C.Y b12,3; X &a3=b1;

D.X a410;Y b2=a4;

class Base

{ public: int i;

Baseint t : i t { }

};

class Derived: protected Base

{ Base b;

int j;

public:

Derived int t;

};

在构造函数Derived的下列定义中,正确的是B

A. Derived : : Derived int t : bt, jt { }

B. Derived : : Derived int t : bt, Baset, jt { }

C. Derived : : Derived int t : Baset, jt { }

D. Derived : : Derived int t : it, bt, jt { }

.在哪种派生方式中,派生类可以访问基类中的protected成员B

Apublic和private Bpublic、protected和private

Cprotected和private D仅protected

在C++中,类与类之间的继承关系具有C

A 自反性 B 对称性 C 传递性 D 反对称性

下列关于类的继承描述中,A 是错误的

A 派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数

B 派生类也是基类,但基类不一定具有派生类的全部属性和方法

C 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法

D 一个基类可以有多个派生类,一个派生类可以有多个基类

.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的C

A public成员 B private成员 C protected成员 D 友元

当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的 B

A public成员 B private成员 C protected成员 D 友元

不论派生类以何种方法继承基类,都不能使用基类的B

A public成员 B private成员 C protected成员 D public成员和protected成员

在创建派生类对象时,构造函数的执行顺序是D

A 对象成员构造函数、基类构造函数、派生类本身的构造函数

B 派生类本身的构造函数、基类构造函数、对象成员构造函数

C 基类构造函数、派生类本身的构造函数、对象成员构造函数

D 基类构造函数、对象成员构造函数、派生类本身的构造函数

下列虚基类的声明中,正确的是 D ;

Aclass virtual B:public A

Bvirtual class B:public A

Cclass B:public A virtual

Dclass B:virtual public A

下面叙述错误的是A ;

A基类的protected成员在派生类中仍然是protected的

B基类的protected成员在public派生类中仍然是protected的

C基类的protected成员在private派生类中是private的

D基类的protected成员不能被派生类的对象访问

下列说法中错误的是A ;

A 保护继承时基类中的public成员在派生类中仍是public的

B公有继承时基类中的private成员在派生类中仍是private的

C私有继承时基类中的public成员在派生类中是private的

D保护继承时基类中的public成员在派生类中是protected的

关于多继承二义性的描述中,错误的是B ;

A一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性

B解决二义性的最常用的方法是对成员名的限定法

C基类和派生类中同时出现的同名函数,也存在二义性问题

D一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性

下面叙述错误的是C ;

A派生类可以使用private派生

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

C基类成员的访问能力在派生类中维持不变

D赋值兼容规则也适用于多继承的组合

派生类的构造函数的成员初始化列表中,不能包含C ;

A基类的构造函数

B派生类中子对象的初始化

C基类中子对象的初始化

D派生类中一般数据成员的初始化

下面B 的叙述不符合赋值兼容规则;

A派生类的对象可以赋值给基类的对象

B基类的对象可以赋值给派生类的对象

C派生类的对象可以初始化基类的引用

D派生类的对象的地址可以赋值给指向基类的指针

.下列虚基类的声明中,正确的是: B

Aclass virtual B: public A Bclass B: virtual public A

Cclass B: public A virtual Dvirtual class B: public A

.C++设置虚基类的目的是 A

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

3.2填空题

1、 垂直访问时,保护成员的访问控制权限与_公有__成员相同;

2、 利用继承能够实现_代码复用__;这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件;

3、 派生类对基类的继承有三种方式:__public__、___protected__ 和___private__;

4、 多继承情况下,派生类的构造函数的执行顺序取决于__定义__派生类时所指定的各基类的顺序;

5、 C++提供的_多继承__机制允许一个派生类继承多个基类,即使这些基类是相互无关的;

6、 派生类可以调用其_定义___中不具备的数据和操作;

7、 对基类数据成员的初始化必须在派生类构造函数中的__初始化列表___处执行;

8、 如果类Alpha继承了类Beta,则类Alpha称为__派生__类,类Beta称为__基__类;

9、 己知下面的程序框架,按注释中的提示补充细节;

include

class planet

{

protected:

double distance;___//行星距太阳的距离

int revolve;___//行星的公转周期

public:

planetdouble d,int r

{

distance=d;

revolve=r;

}

};

class earth:public planet

{

double circumference; //地球绕太阳公转的轨道周长

public:

//定义构造函数earthdouble d,int r,并计算地球绕太阳公转的轨道周长;

//假定:circumnference=2d3.1416

___ earthdouble d,int r: planet d, r{__ circumnference=2d3.1416;}___

//定义show函数显示所有信息

___void show { cout<<”distance is ”<< distance<<”miles, revolve is”<< revolve<<”days”<

cou<<” circumference is “<< circumference<

};

void main

{

earth ob9300000,365;

;

}

10、 设置虚基类的目的是__为了消除二义性__,可通过____virtual_____标识虚基类;

11、 若多继承时,多个基类中拥有一个同名的成员,则__不能__用调整访问权限确定对该成员的访问;

12、 根据基类的定义和测试程序,完成下面派生类的定义;

Class Point

{

public:

Pointint I=0,int j=0{X=I;Y=j;}

void Moveint xOff,int yOff{X+=xOff;Y+=yOff;}

int GetX{return X;}

int GetY{return Y;}

private:

int X,Y;

};

class Rectangle :private Point

{

public:

Rectangleint x,int y,int w,int h__:Pointx,y___{_W = w ; H = h ;_ }

void Moveint xOff,int yOff{_ Point:MovexOff, yOff;__ }

int GetX{__return Point:GetX;__ }

int GetY{___return Point:GetY;__ }

int GetW{__return W;__ }

int GetH{__return H;__ }

private:

int W,H;

}

include

include

void main

{

Rectangle rect1,2,3,4;

5,6;

cout<<“The data of rectX,Y,W,H:“

<<<<“,”<<<<“,”

<<<<“,”<<<<“”<

13、 多继承可以视为是__单继承__的扩展;

14、 在划线处填上适当的语句,完成下列程序;

include

class Point

{

public:

pointdouble a,double b,double c{_X =a; Y=b; Z =c;__}

double Getx{return X;}

double Gety{return Y;}

double Getz{return Z;}

private:

__double X, Y;_____

protected:

__double Z;_____

};

class Line :_____public____Point

{

public:

Linedouble a ,double b,double c,double d_:Pointa,b,c_____{____K = d;___ }

void show

{

cout<

cout<

cout<

cout<

}

private:

double k;

};

void main

{

Line obj1.2,3.4,5.6,7.8;

;

}

15、 类继承中,缺省的继承方式是__private___;

16、 当用protected继承从基类派生→个类时,基类的public成员成为派生类的__protected__成员,protected成员成为派生类的_____protected____成员;

18、 __公有派生__类的对象可作为____基___类的对象处理;

19、 指向基类的对象的指针变量也可以指向__公有派生类_的对象;

20、 类之间的”有”关系代表__组合___,”是”关系代表__继承__;

3.3简答题

A、派生类的定义及其特点

B、单继承和多继承的概念及其关系

C、继承方式的种类及其各自的特点

D、在继承中构造函数和析构函数的调用规则

F、赋值兼容原则

G、类模板和模板类的含义及其关系

3.4读程序题

1、 写出下列程序的运行结果;

include

class Base

{

public:

void Who{cout<<"class Base"<

};

class Derived1:public Base

{

public:

void Who{cout<<"class Derived1"<

};

class Derived2:public Base

{

public:

void Who{cout<<"class Derived2"<

};

void main

{

Base obj1,p;

Derived1 obj2;

Derived2 obj3;

p=&obj1;

p->Who;

p=&obj2;

p->Who;

p=&obj3;

p->Who;

;

;

}

答案:

class Base

class Base

class Base

class Derived1

class Derived2

2、 写出下列程序的运行结果;

include

class instrument

{

public:

void display const{cout<<"instument::display."<

};

class piano:public instrument

{

public:

void display const{cout<<"piano::display."<

};

class guitar:public instrument

{

public:

void display const{cout<<"guitar::display."<

};

void toneinstrument & I

{

y;

};

void main

{

guitar guitar1;

toneguitar1;

piano piano1;

tonepiano1;

}

答案

instument::display.

instument::display.

3、 写出下列程序的运行结果;

include

class A

{

public:

Achar i{cout<<"A's cons."<

~A{cout<<"A's des."<

};

class B:virtual public A

{

public:

Bchar i,char j:Ai{b = j; cout<<"B's cons."<

~B{cout<<"B's des."<

private:

char b;

};

class C:virtual public A

{

public:

Cchar i,char j:Ai

{

cout<<"C's cons."<

}

~C{cout<<"C's des."<

};

class D:public B,public C

{

public:

Dchar i,char j,char k,char s,char m,char n

:Ck,s,Bi,j,Ai,aam{cout<<"D's cons."<

~D{cout<<"D's des."<

private:

A aa;

};

void main

{

D obj'a','b','c','d','e','f';

}

答案 :

A's cons.a

B's cons.b

C's cons.d

A's cons.e

D's cons.

D's des.

A's des.

C's des.

B's des.

A's des.

类的多态性

4.1选择题

.实现运行时的多态性采用 D

A重载函数 B构造函数 C析构函数 D虚函数

.在派生类中重新定义虚函数时,必须在下列哪方面与基类保持一致;A

A参数类型 B参数名字 C操作内容 D赋值

.当一个类的某个函数被说明为virtual时,在该类的所有派生类中的同原型函数A

A都是虚函数 B只有被重新说明时才是虚函数

C都不是虚函数 D只有被重新说明为virtual时才是虚函数

.通过下述哪一项调用虚函数时,采用动态联编;A

A对象指针 B对象名 C成员名限定 D派生类名

下面描述中,正确的是B D 两个答案

A 虚函数是没有实现的函数 B 纯虚函数的实现在派生类中

C 抽象类是没有纯虚函数的类 D 抽象类指针可以指向不同的派生类对象

若一个类中含有纯虚函数,则该类称为D

A 基类 B 纯基类 C 派生类 D 抽象类

假设A为抽象类,下列声明B 是正确的

A A funint; B A p; C int funA; D A Obj;

在C++中,要实现动态联编,必须使用D 调用虚函数

A 类名 B 派生类指针 C 对象名 D 基类指针

下列函数中,可以作为虚函数的是C D两个答案

A 普通函数 B 构造函数 C成员函数 D 析构函数

在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值B

A 不同 B 相同 C 相容 D 部分相同

下面函数原型声明中,C 声明了fun为普通虚函数

A void fun=0; B virtual void fun=0;

C virtual void fun; D virtual void fun{};

在下面四个选项中, A是用来声明虚函数的;

Avirtual

Bpublic

Cusing

Dfalse

在下面程序中,A、B、C、D四句编译时出现错误的是C;

Class A______ //A

{

public:______ //B

A{func;}___ //C

virtual void func=0;___//D

};

实现运行时的多态性要使用D;

A重载函数

B构造函数

C析构函数

D虚函数

对虚函数的调用D ;

A一定使用动态联编

B必须使用动态联编

C一定使用静态联编

D不一定使用动态联编

在派生类中重新定义虚函数时,除了D 方面,其他方面都必须与基类中相应的虚函数保持一致;

A参数个数

B参数类型

C函数名称

D函数体

关于虚函数的描述中,正确的是D;

A虚函数是一个静态成员函数

B虚函数是一个非成员函数

C虚函数既可以在函数说明时定义,也可以在函数实现时定义

D派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型

下列描述中, D是抽象类的特性;

A可以说明虚函数

B可以进行构造函数重载

C可以定义友元函数

D不能说明其对象

关于纯虚函数和抽象类的描述中,错误的是C ;

A 纯虚函数是一种特殊的虚函数,它没有具体的实现

B 抽象类是指具有纯虚函数的类

C 一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类

D 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

以下C 成员函数表示纯虚函数;

Avirtual int vfint;

Bvoid vfint=0;

Cvirtual void vf=0;

Dvirtual void vfint{}

下列关于动态联编的描述中,错误的是D;

A动态联编是以虚函数为基础的

B动态联编是在运行时确定所调用的函数代码的

C动态联编调用函数操作是指向对象的指针或对象引用

D动态联编是在编译时确定操作函数的

如果一个类至少有一个纯虚函数,那么就称该类为A;

A抽象类

B虚基类

C派生类

D以上都不对

下面的描述中,正确的是A;

Avirtual可以用来声明虚函数

B含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类

C即使基类的构造函数没有参数,派生类也必须显示调用其构造函数

D静态数据成员可以通过成员初始化列表来初始化

4.2填空题

1、 在析构函数中调用虚函数时,采用__静态__联编;

2、 动态联编是在__虚函数___的支持下实现的,它通过__指针或引用__来调用该函数操作;

3、 动态联编中直到__程序运行__时才能确定调用哪个函数:而静态联编则是在__程序编译__时进行的;

4、 C++中__不支持__虚构造函数,但___支持___虚析构函数;

5、 静态联编所支持的多态性称为__编译时__多态性,动态联编所支持的多态性则称为___运行时___多态性,动态多态性由___虚函数___来支持;

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

7、 下列程序的运行结果如下:

Base's cons.

Derived's cons.

Derived's des.

Base's des.

根据结果将程序补充完整;

incude

class Base

{

public:

Base{cout<<"Base's cons."<

__virtual ~Base__{cout<<"Base's des."

};

class Derived:public Base

{

public:

Derived{cout<<"Derived's cons."<

~Derived{cout<<"Derived's des."<

};

void main

{

Base Ptr=__new _ Derived_

delete ptr;

}

8、 抽象类不能__定义对象,但可以_声明指针或引用__作为参数类型,函数返回类型或显式转换类型;

9、 根据不同的输出结果,在函数Tone中填入正确的语句;

include

class Instrument

{

public:

virtual void Print const{cout<<"Instrument:Print"<

};

class Piano:public Instument

{

public:

void Print const{cout<<"Piano::Print<

};

class Guitar :public InstruIment

{

pub1ic:

void Print const{cout<<"Guiur::Print"<

};

void Tone__Instrument obj__//第二个要求改成Instrument &obj

{

__;__

}

void main

{

Guitar g;

Toneg;

Piano p;

Tonep;

}

1输出结果为:

Instrument::Print

Instrument::Print

2输出结果为:

Guitar::Print

Piano::Print

10、 对虚函数使用对象指针或引用调用,系统使用__动态__联编:使用对象调用时,系统使用

__静态__联编;

11、 将下列程序补充完整;

include

class convert

{

public:

convertdouble I{va11=I;}

____ virtual void compute=0; ____

protected:

double val1;

double va12:

};

//liters to gallons

class l_to_g:public convert

{

public:

__ l_to_gdouble I:convertI{} ____

void compute

{

va12=va11/3.7854;

cout<

}

};

//Fahrenheit to Celsius

class f_to_c:public convert

{

public:

f_to_cdouble I:convertI{}

void& compute

{

va12=va11-325/9;

cout<

}

};

void fun__convert& f____

{

fpute;

}

void main

{

l_to_g lgobj4;

f_to_c fcobj70;

funlgobj;

funfcobj;

}

12、 下列程序的运行结果如下:

Derive1's Print called.

Derive2's Print caIIed.

根据结果将程序补充完整;

include

class Base

{

public:

Baseint I{b=I;}

__ virtual Print=0; ____

protected:

int b;

}

class Derive1:public Base

{

public:

__ Derive1int& I:BaseI{} ___

void Print

{

cout<<"Derive1's Print called."<

}

};

class Derive2:public Base

{

public:

Derive2int I:BaseI{}

void Print{cout<<“Derive2’s Print called.”<

};

void fun__Base obj ____

{

obj->Print;

};

void main

{

Derive1 d1=new Derive11;

Derive2 d2=new Derive22;

fund1;

fund2;

}

13、 在一个成员函数内调用一个虚函数时,对该虚函数的调用进行_动态__联编;

14、 带有__纯虚函数__的类称为抽象类,它只能作为__基类__来使用;

4.3简答题

A、成员函数重载与虚函数的区别

B、静态联编和动态联编的含义

C、纯虚函数和抽象类的定义及其关系

D、抽象类的特点

4.4读程序题

1、写出下列程序的运行结果;

include

class Base

{

public:

Baseint i{x=i;cout<<"Base:"<

virtual ~Base{cout<<"~Base:"<

private:

int x;

};

class Derived :public Base

{

public:

Derivedint i,int j:Basei{y=j;cout<<"Derived:"<

~Derived{cout<<"~Derived:"<

private:

int y;

};

void main

{

Base b1=new Base15;

delete b1;

Base b2=new Derived20,25;

delete b2;

}

答案

Base:15

~Base:15

Base:20

Derived:25

~Derived:25

~Base:20

2、 阅读下列程序,回答后面提出的问题;

include

class Base

{

public:

Base:x0,y0{}

Baseint I,int j:xI,yj{}

int GetX const{return x;}

int GetY const{return y;}

virtual void Print const{cout<<"x="< virtual ~Base{Print;}

private:

int x,y;

};

class Derived :public Base

{

public:

Derived:z0{}

Derivedint I,int j,int k:BaseI,j,zk{}

void Print const

{cout<<"x+z="< ~Derived{Print;}

private:

int z;

};

void main

{

Base d1=new Derived;

d1->Print;

Base d2=new Derived10,20,30;

d2->Print;

delete d2;

delete d1;

}

答案

x+z=0 y+z=0

x+z=40 y+z=50

x+z=40 y+z=50

x=10 y=20

x+z=0 y+z=0

x=0 y=0

3、 阅读下列程序,回答后面提出的问题;

include

class Vehicle

{

public:

void SetColorint c{color=c;}

virtual void Move{cout<<"Vehicle moving."<

private:

int color;

};

class Car :public Vehicle

{

public:

void Move{cout<<"Carmoving."<

};

class Bus :public Vehicle

{

public:

void Move{cout<<"Bus moving."<

};

class SportsCar:public Car

{

};

class Coupe :public Car

{

public:

void Move{cout<<"Coupe moving."<

};

void main

{

Vehicle vec;

vec=new Car;

vec->Move;

delete vec;

vec=new Bus;

vec->Move;

delete vec;

vec=new SportsCar;

vec->Move;

delete vec;

vec=new Coupe;

vec->Move;

delete vec;

}

答案:

Carmoving.

Bus moving.

Carmoving.

Coupe moving.

运算符重载

5.1选择题

友元运算符obj>obj2被C++编译器解释为A ;

Aoperator>obj1,obj2

B>obj1,obj2

or>obj1

r>obj2

下面对C++运算符的正确的描述是D ;

A只有类成员运算符

B只有友元运算符

C只有非成员和非友元运算符

D上述三者都有

下列关于C++运算符函数的返回类型的描述中,错误的是C;

A可以是类类型

B可以是int类型

C可以是void类型

D可以是float类型

重载赋值操作符时,应声明为C函数;

A友元

B虚

C成员

D多态

在一个类中可以对一个操作符进行D重载;

A1种

B2种以下

C3种以下

D多种

下列关于运算符重载的描述中,正确的是D;

A运算符重载可以改变运算符的操作数的个数

B运算符重载可以改变优先级

C运算符重载可以改变结合性

D运算符重载不可以改变语法结构

下列运算符中, C运算符在C++中不能重载;

A=

B

C::

Ddelete

下列运算符中, A运算符在C++中不能重载;

A〕 :

B

Cnew

D&&

在重载运算符函数时,下面D运算符必须重载为类成员函数形式;

A+

B-

C++

D->

下列运算符不能用友元函数重载的是B ;

A+

B=

C

D<<

下面对友元的错误描述是D

A 关键字friend用于声明友元

B 一个类的成员函数可以是另一个类的友元

C 友元函数访问对象的成员不受访问特性影响

D 友元函数通过this指针访问对象成员

.如果类A被说明成类B的友元,则C

A类A的成员即是类B的成员

B类B的成员即是类A的成员

C类A的成员函数可以访问类B的所有成员

D类B的成员函数可以访问类A的所有成员

.在C++中不能被重载的一组运算符是:A

A:: : . sizeof B : . sizeof ++ ->

C:: : new delete D++ -- : sizeof

5.2填空题

1、要在类的对象上使用运算符,除了运算符__=__和__&__以外,其他的运算符都必须被重载;

2、 在C++中,只能重载为类的成员函数的运算符是___=__、____、__ __、_->__;

3、 运算符与运算符必须重载为__类的成员函数___;

4、 利用成员函数对二元运算符重载,其左操作数为__this指针指向的当前对象__,右操作数为__成员函数参数__;

5、 下列程序定义了一实部为mal,虚部为imag的复数类complex,并在类中重载了复数的+、-操作;请将下列程序补充完整;

Class Complex

{

public:

Complexdouble r=0.0,double I=0.O{__ real=r;imag=I;___}

__Complex__operator +Complex;

__friend Complex____operator -Complex,Complex;

private:

double real,imag;

};

___Complex Complex::operator +Complex c

{

return Complex__real+,imag+___;

};

___Complex___operator -Complex c1,Complex c2

{

return Complex___, ____;

}

6、 单目运算符作为类成员函数重载时__没有__的参数;双目运算符作为__类成员函数__重载时需声明其右操作数,作为_友元函数__重载时需声明全部操作数;

7、 重载运算符函数的函数名时使用关键字_ operator ___;

8、 重载的运算符仍然保持其原来的优先级、__结合性__和__语法结构__;

9、 为满足运算符+的可交换性,必须将其重载为_友元函数___;

10、 C++中不能重载的运算符有__.__、__ 取内容 __、__::__、__ :__和__size of__;

11、 设a和b是两个整型变量,a+b表示这两个变量的和:设c和d为浮点型变量,c+d也表示这两个变量的和;这里的运算符+具有不同的用途,这是__运算符重载___的例子;

5.3简答题

A、友元的特点

B、运算符重载的含义

C、运算符重载的限制

5.4读程序题

1、 写出下列程序的运行结果;

include

class Rect

{

public:

Rectint l,int w{length=l;width=w;}

void Print{cout<<"Area:"<

Rect operator int d{return Rectlengthd, width d;}

private:

int length,width;

};

void main

{

Rect p5,4, m0,0;

m = p 4;

;

}

答案:

Area:320

2、 写出下列程序的运行结果;

include

class Vector

{

public:

Vector{}

Vectorint i,int j{x=i;y=j;}

friend Vector operator +=Vector v1,Vector v2

{

v1.x+=v2.x;

v1.y+=v2.y;

return v1;

}

Vector operator -=Vector v

{

Vector temp;

temp.x=x-v.x;

temp.y=y-v.y;

return temp;

}

void display{cout<<""<

private:

int x,y;

};

void main

{

Vector v11,2,v23,4,v3,v4;

v3=v1+=v2;

v4=v1-=v2;

cout<<"v1=";

y;

cout<<"v2=";

y;

cout<<"v3=";

y;

cout<<"v4=";

y;

}

答案:

v1=1,2

v2=3,4

v3=4,6

v4=-2,-2

3、 写出下列程序的运行结果;

include

class Coord

{

public:

Coordint I=0,int j=0{x=I;y=j;}

void Print{cout<<"x="<

friend Coord operator++Coord op;

friend Coord operator++Coord &op, int ;

private:

int x, y;

};

Coord operator++Coord op

{

++op.x;

++op.y;

return op;

}

Coord operator++Coord &op, int

{

++op.x;

++op.y;

return op;

}

void main

{

Coord obj1,2, obj25,8;

;

++obj;

obj2++;

;

;

}

答案:

x=1,y=2

x=1,y=2

x=6,y=9


本文标签: 函数 成员 基类 对象 下列