1、函数重载:
术语“函数重载”(overload)指的是可以有多个同名的函数,因此对函数名称进行了重载。
可以通过函数重载来设计一系列函数-它们完成相同的工作,但使用不同的参数列表。
下面还将介绍两种常用情况的模板,一种是重载的模板:由于并非所有的类型都使用相同的算法,
为满足需求,我们可以像重载常规函数定义那样重载模板定义;另一种是显式具体化,假设我们定义一个模板函数swap(T a,T,b);用于交换两个参数的内容,由于C++允许将一个结构的内容赋给另一个结构,于是即使T是一个结构swap模板也可以用,
但是如果我们只是希望交换结构中的部分成员,则swap就不能直接使用,需要使用不同的代码,
可以提供一个具体化函数定义-称为显式具体化其中包含所需代码,当编译器找到与函数调用匹配的具体化定义时,将调用该函数。
2、get()函数不能从流中提取终止字符,终止字符仍留在流中。getline()函数可以从流中提取终止字符,但终止字符被丢弃。 【正确】
3、记录流的当前格式化状态标志字中的每一位用于记录一种格式,这种格式是不能被设置或清除的 【错】
4、对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数 【错】
Operator Overloading functions can be member functions can also be achieved by non-member function. 【正确】
并非对“每个”可重载的运算符来说,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数
一些运算符(如下标运算符[],函数调用运算符(),赋值运算符=等)只能重载为成员函数,
而左操作数为std::cout或std::cin的输入输出运算符只能重载为非成员函数
5、动态绑定是在运行时选定调用的成员函数的。【正确】
6、操纵符本身是一个对象,它可以直接被提取符或插入符操作 【正确】
7、使用提取符(<<)可以输出各种基本数据类型的变量的值,也可以输出指针值。 【正确】
8、作用域运算符(::)只能用来限定成员函数所属的类. 【错】
9、可以在类的构造函数中对静态数据成员进行初始化. 【错】
10、在私有继承中,基类中所有成员对派生类的对象都是不可见的. 【对】
11、在保护继承中,对于派生类的访问同于公有继承,而对于派生类的对象的访问同于私有继承. 【对】
12、只要是类M继承了类N,就可以说类M是类N的子类型. 【错】
13、多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序. 【对】
14、预定义的插入符从键盘上接收数据是不带缓冲区的。【错】
1、对于类之间的友元关系: (2分)
如果类A是类B的友元,则B的成员函数可以访问A的私有成员
如果类A是类B的友元,则B也是A的友元。(友元性是单向的)
如果类A是类B的友元,并且类B是类C的友元,则类A也是类C的友元。(友元性不具有传递性,和继承性)
// 以上答案都不对。
2下列描述中,( )是抽象类的特性。 (2分)
//不能定义该类对象
可以说明虚函数
可以进行构造函数重载
可以定义友元函数
3设int x;,则经过()后,语句*px=0;可将x值置为0。 (2分)
const int * px=&x;
int * px;
int const * px=&x;
// int * const px=&x;
4在( )情况下适宜采用inline定义内联函数。 (2分)
函数代码多、不常调用
函数体含有循环语句
函数体含有递归语句
//函数代码少、频繁调用
5以下关于C++语言中继承的叙述中,错误的是( )。 (2分)
继承定义了一种类与类之间的关系
继承关系中的子类将拥有父类的全部属性和方法
//继承仅仅允许单继承,即不允许一个子类有多个父类
继承是父类和子类之间共享数据和方法的机制
6在派生类对基类继承的传递性中,__是错误的。 (2分)
在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员
不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可能见的。
//在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员
在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员
7
使用操作符setw对数据进行格式输出时,需要包含()文件。 (2分)
iostream.h
fstream.h(fstream.h是头文件,是对文件操作使用的。 继承 iostream; fstream 拥有iostream功能,但并不是包含关系。 fstream 是对文件操作,而 iostream 是 对 标准输入输出文件的操作。在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。)
//iomanip.h(iomanip.h是I/O流控制头文件,就像C里面的格式化输出一样,在新版本的c++中头文件已经用iomanip取代了iomanip.h,其中io代表输入输出,manip是manipulator(操纵器)的缩写(在c++上只有缩写才有效))
stdlib.h
8One of the major features in C++ is ( ) handling,which is a better way of handling errors. (2分)
test
//exception
pointer
data
9对定义重载函数的下列要求中,( )是错误的。 (2分)
要求参数的个数不同
// 要求函数的返回值不同
要求参数个数相同时,参数类型不同
要求参数中至少有一个类型不同
10在面向对象系统中,对象是基本的运行时实体,它 _ 。 (2分)
只能包括数据(属性)
//把属性和行为封装为一个整体
必须具有显式定义的对象名
只能包括操作(行为)
11关于动态绑定的下列描述中,( )是错误的。 (2分)(注意和纯虚函数的区别)
动态绑定调用函数操作是通过指向对象的指针或对象引用来实现的
//动态绑定是在编译时确定操作函数的
动态绑定在运行时确定所调用的函数代码
动态绑定是以虚函数为基础的
12在C++中,关于下列设置缺省参数值的描述中,()是正确的。 (2分)
//在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
设置缺省参数值时,必须全部都设置;
只能在函数的定义性声明中指定参数的缺省值;
不允许设置缺省参数值;
13所有类都应该有: (2分)
构造函数
以上答案都不对
//构造函数和析构函数
析构函数
14以下程序存在的问题是: (2分)
void fun()
{
int *num1, *num2;
num1 = new int[10];
num2 = new int[20];
num1[0] = 100;
num2[0] = 300;
num1 = num2;
delete [] num1;
}
// num1最初指向的空间没有释放
程序没有问题
num2最初指向的空间没有释放
num2不能给num1赋值
15命名空间应用于: (2分)
提高代码的执行速度
以上答案都正确
在类外定义类的成员函数
// 避免各个不同函数、变量等的名称冲突
16设A为自定义类,现有普通函数int fun(A& x)。则在该函数被调用]时: (2分)
//将执行复制构造函数来初始化形参x
仅在实参为常量时,才会执行复制构造函数以初始化形参x
无需初始化形参x
仅在该函数为A类的友元函数时,无需初始化形参x
17析构函数可以返回: (2分)
指向某个类的指针
某个类的对象
状态信息表明对象是否被正确地析构
// 不可返回任何值
术语“函数重载”(overload)指的是可以有多个同名的函数,因此对函数名称进行了重载。
可以通过函数重载来设计一系列函数-它们完成相同的工作,但使用不同的参数列表。
下面还将介绍两种常用情况的模板,一种是重载的模板:由于并非所有的类型都使用相同的算法,
为满足需求,我们可以像重载常规函数定义那样重载模板定义;另一种是显式具体化,假设我们定义一个模板函数swap(T a,T,b);用于交换两个参数的内容,由于C++允许将一个结构的内容赋给另一个结构,于是即使T是一个结构swap模板也可以用,
但是如果我们只是希望交换结构中的部分成员,则swap就不能直接使用,需要使用不同的代码,
可以提供一个具体化函数定义-称为显式具体化其中包含所需代码,当编译器找到与函数调用匹配的具体化定义时,将调用该函数。
2、get()函数不能从流中提取终止字符,终止字符仍留在流中。getline()函数可以从流中提取终止字符,但终止字符被丢弃。 【正确】
3、记录流的当前格式化状态标志字中的每一位用于记录一种格式,这种格式是不能被设置或清除的 【错】
4、对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数 【错】
Operator Overloading functions can be member functions can also be achieved by non-member function. 【正确】
并非对“每个”可重载的运算符来说,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数
一些运算符(如下标运算符[],函数调用运算符(),赋值运算符=等)只能重载为成员函数,
而左操作数为std::cout或std::cin的输入输出运算符只能重载为非成员函数
5、动态绑定是在运行时选定调用的成员函数的。【正确】
6、操纵符本身是一个对象,它可以直接被提取符或插入符操作 【正确】
7、使用提取符(<<)可以输出各种基本数据类型的变量的值,也可以输出指针值。 【正确】
8、作用域运算符(::)只能用来限定成员函数所属的类. 【错】
9、可以在类的构造函数中对静态数据成员进行初始化. 【错】
10、在私有继承中,基类中所有成员对派生类的对象都是不可见的. 【对】
11、在保护继承中,对于派生类的访问同于公有继承,而对于派生类的对象的访问同于私有继承. 【对】
12、只要是类M继承了类N,就可以说类M是类N的子类型. 【错】
13、多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序. 【对】
14、预定义的插入符从键盘上接收数据是不带缓冲区的。【错】
1、对于类之间的友元关系: (2分)
如果类A是类B的友元,则B的成员函数可以访问A的私有成员
如果类A是类B的友元,则B也是A的友元。(友元性是单向的)
如果类A是类B的友元,并且类B是类C的友元,则类A也是类C的友元。(友元性不具有传递性,和继承性)
// 以上答案都不对。
2下列描述中,( )是抽象类的特性。 (2分)
//不能定义该类对象
可以说明虚函数
可以进行构造函数重载
可以定义友元函数
3设int x;,则经过()后,语句*px=0;可将x值置为0。 (2分)
const int * px=&x;
int * px;
int const * px=&x;
// int * const px=&x;
4在( )情况下适宜采用inline定义内联函数。 (2分)
函数代码多、不常调用
函数体含有循环语句
函数体含有递归语句
//函数代码少、频繁调用
5以下关于C++语言中继承的叙述中,错误的是( )。 (2分)
继承定义了一种类与类之间的关系
继承关系中的子类将拥有父类的全部属性和方法
//继承仅仅允许单继承,即不允许一个子类有多个父类
继承是父类和子类之间共享数据和方法的机制
6在派生类对基类继承的传递性中,__是错误的。 (2分)
在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员
不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可能见的。
//在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员
在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员
7
使用操作符setw对数据进行格式输出时,需要包含()文件。 (2分)
iostream.h
fstream.h(fstream.h是头文件,是对文件操作使用的。 继承 iostream; fstream 拥有iostream功能,但并不是包含关系。 fstream 是对文件操作,而 iostream 是 对 标准输入输出文件的操作。在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。)
//iomanip.h(iomanip.h是I/O流控制头文件,就像C里面的格式化输出一样,在新版本的c++中头文件已经用iomanip取代了iomanip.h,其中io代表输入输出,manip是manipulator(操纵器)的缩写(在c++上只有缩写才有效))
stdlib.h
8One of the major features in C++ is ( ) handling,which is a better way of handling errors. (2分)
test
//exception
pointer
data
9对定义重载函数的下列要求中,( )是错误的。 (2分)
要求参数的个数不同
// 要求函数的返回值不同
要求参数个数相同时,参数类型不同
要求参数中至少有一个类型不同
10在面向对象系统中,对象是基本的运行时实体,它 _ 。 (2分)
只能包括数据(属性)
//把属性和行为封装为一个整体
必须具有显式定义的对象名
只能包括操作(行为)
11关于动态绑定的下列描述中,( )是错误的。 (2分)(注意和纯虚函数的区别)
动态绑定调用函数操作是通过指向对象的指针或对象引用来实现的
//动态绑定是在编译时确定操作函数的
动态绑定在运行时确定所调用的函数代码
动态绑定是以虚函数为基础的
12在C++中,关于下列设置缺省参数值的描述中,()是正确的。 (2分)
//在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
设置缺省参数值时,必须全部都设置;
只能在函数的定义性声明中指定参数的缺省值;
不允许设置缺省参数值;
13所有类都应该有: (2分)
构造函数
以上答案都不对
//构造函数和析构函数
析构函数
14以下程序存在的问题是: (2分)
void fun()
{
int *num1, *num2;
num1 = new int[10];
num2 = new int[20];
num1[0] = 100;
num2[0] = 300;
num1 = num2;
delete [] num1;
}
// num1最初指向的空间没有释放
程序没有问题
num2最初指向的空间没有释放
num2不能给num1赋值
15命名空间应用于: (2分)
提高代码的执行速度
以上答案都正确
在类外定义类的成员函数
// 避免各个不同函数、变量等的名称冲突
16设A为自定义类,现有普通函数int fun(A& x)。则在该函数被调用]时: (2分)
//将执行复制构造函数来初始化形参x
仅在实参为常量时,才会执行复制构造函数以初始化形参x
无需初始化形参x
仅在该函数为A类的友元函数时,无需初始化形参x
17析构函数可以返回: (2分)
指向某个类的指针
某个类的对象
状态信息表明对象是否被正确地析构
// 不可返回任何值