c,,
类成员函数调用
篇一:11级C++综合习题(含答案)
一、 单项选择题
1. 函数重载是指( A )。
A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C. 两个以上的函数名字不同,但形参的个数或类型相同
D. 两个以上的函数取相同的函数名,并且函数的返回类型相同
2. 下列对引用的陈述中不正确的是( C )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
3. 关于封装,下列说法中不正确的是( A )。
A. 通过封装,对象的全部属性和操作结合在一起,形成
1
一个整体
B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C. 通过封装,每个对象都成为相对独立的实体
D. 通过封装,对象的属性都是不可见的
4. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( C )。
A. px(a)B. px[a]C. px-aD. px.a
5. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。
A. int AA::a()B. int AA:a()
C. AA::a() D. AA::int a()
6. 类的构造函数是在定义该类的一个( C )时被自动调用执行的。
A. 成员函数B. 数据成员C. 对象D. 友元函数
7.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C )
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
2
8.对于类定义
class A{
public:
virtual void func1( ){ }
void func2( ){ }
};
class B:public A{
public:
void func1( ){cout<<〃class B func 1〃<<end1;}
virtual void func2( ){cout<<〃class B func 2〃<<end1;}
};
下面正确的叙述是( C ) A、 A::func2( )和B::func1( )都是虚函数
,、A::func2( )和B::func1( )都不是虚函数
,、 B::func1( )是虚函数,而A::func2( )不是虚函数
,、B::func1( )不是虚函数,而A::func2( )是虚函数
9. 对于int *pa[5];的描述,( D )是正确的。
A、pa是一个指向数组的指针,所指向的数组是5个int型元素;
B、 pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
3
C、 pa[5]表示某个数组的第5个元素的值;
D、pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
10. 下述静态数据成员的特征中,( D )是错误的。
A、 说明静态数据成员时前边要加修饰符static;
B、 静态数据成员要在类体外进行初始化;
C、 引用静态数据成员时,要在静态数据成员名前加<类名和作用域运算符;
D、 静态数据成员不是所有对象所共用的。
11. 以下关于函数模板叙述正确的是( C )。
A. 函数模板也是一个具体类型的函数
B. 函数模板的类型参数与函数的参数是同一个概念
C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数
D. 用函数模板定义的函数没有类型
12. 下列( B )的调用方式是引用调用。
A. 形参和实参都是变量 B.形参是指针,实参是地址值
C. 形参是引用,实参是变量D.形参是变量,实参是地址值
13. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( A )。
A. 内联函数 B.重载函数 C.递归函数 D.函数模板
4
14. 面向对象方法的多态性是指( C )。
A. 一个类可以派生出多个特殊类
B. 一个对象在不同的运行环境中可以有不同的变体
C. 针对一消息,不同的对象可以以适合自身的方式加以响应
D. 一个对象可以是由多个其他对象组合而成的
15. 在类作用域中能够直接使用该类的( D )成员名进行访问。
A. 私有B. 公用C. 保护D. 任何
16. 假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为( D )。
A. AB() {} B. AB(): a(0){}
C. AB(int aa=0) {a=aa;}D. AB(int aa) {}
17. 对于任一个类,用户所能定义的构造函数的个数至多为( D )。
A. 0B. 1C. 2D. 任意个
18. 对类对象成员的初始化是通过构造函数中给出的( D )实现的。
A. 函数体B. 初始化表C. 参数表D. 初始化表或函数体
19. 被非静态成员函数访问的类的数据成员( A )。
A. 可以是非静态数据成员或静态数据成员 B. 不可能是类的静态数据成员
5
C. 只能是类的非静态数据成员 D. 只能是类的静态数据成员
20. 引入友元的主要目的是为了( C )。
A. 增强数据安全性 B. 提高程序的可靠性
C. 提高程序的效率和灵活性 D. 保证类的封装性
21(下面有关重载函数的描述中,正确的是(C )。
A)重载函数必须具有不同的返回值类型B)重载函数形参个数必须不同
C)重载函数必须具有不同的形参表 D)重载函数名可以不同
22(假定MyCIass为一个类,那么下列的函数说明中,( D )为该类的析构函数。
A)void~MyClass(); B)~MyClass(int n);C)MyClass( ); D)
~MyClass( );
23(( A )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
A)模板B)类 C)对象D)函数
24(下面关于静态成员函数的途术中错语的是(B )。
A) 静态成员函数可以有返回值B) this指针可以指向静态成员函数
C) 静态成员函数可以具有指针参数 D) 静态成员函数可有具有返回值类型
6
25(定义类模板时要使用关键字(D )。
A)private B) public C)delete D)template
26(下列是重载乘法运算符的函数原型声明,其中错误的
是(A )。
A)MyClass operator*(double,double);
B)MyClass operator*(double,MyClass);
C)MyClass operator*(MyClass,double);
D)MyClass operator*(MyClass,MyClass);
27(以下(C )成员函数表示纯虚函数。
A)virtual int fun(int)
C)virtual void fun()=0 B)void
fun(int)=0D)virtual void fun(int){ }
28(关于纯虚函数,下列表述中正确的是(A )。
A)纯虚函数的声明总是以=0结束 B)含有纯虚函数的类
可以定义对象
C)含有纯虚函数的类是抽象类 D)上面都是错误的
29((C )解决二义性问题。
A)能使用作用域分辨操作符B) 只能使用虚基类
C) 使用作用域分辨操作符或虚基类 D) 上面都不能
30(实现编译时的多态性要使用(A )。
A)重载函数 B)析构函数 C)构造函数 D)虚函数
31、C++语言是从早期的C语言逐渐发展演变而来的.
7
与C语言相比,它在求解问题方法上进行的最大改进是(B)
A、面向过程 B、面向对象 C、安全性 D、复用性
32、考虑函数原型void test(int a,int b=7,char=*),下面的函数调用中,属于不合法调用的是(C)
A、test(5); B、test(5,8); C、test(6,#) D、test(0,0.*);;
33、下面有关重载函数的说法中正确的是(C)
A、重载函数必须具有不同的返回值类型; B、重载函数形参个数必须不同;
C、重载函数必须有不同的形参列表D、重载函数名可以不同;
34、下列关于构造函数的描述中,错误的是(D)
A、构造函数可以设置默认参数; B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数;D、构造函数不可以重载
35. 关于对象概念的描述中,(A )是错误的。
A、 对象就是C语言中的结构变量;
B、 对象代表着正在创建的系统中的一个实体;
C、 对象是一个状态和操作(或方法)的封装体;
D、 对象之间的信息传递是通过消息进行的;
36. 对于int *pa[5];的描述,(D)是正确的。
A、pa是一个指向数组的指针,所指向的数组是5个int型元素;
8
B、 pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
C、 pa[5]表示某个数组的第5个元素的值;
D、pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
37. 下述静态数据成员的特征中,( D )是错误的。
A、 说明静态数据成员时前边要加修饰符static;
B、 静态数据成员要在类体外进行初始化;
C、 引用静态数据成员时,要在静态数据成员名前加<类名和作用域运算符;
D、 静态数据成员不是所有对象所共用的。
38. ( A )是析构函数的特征。
A、 一个类中只能定义一个析构函数; B、 析构函数与类名不同;
C、 析构函数的定义只能在类体内;D、 析构函数可以有一个或多个参数。
39. 已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋
值为5,( C )是正确的。
A、 A1.p=5; B、 A1-p=5;
C、 A1.*p=5;D、 *A1.p=5;
40.派生类的对象对它的基类成员中( C )是可以访问的。
9
A、公有继承的公有成员;
B、 公有继承的私有成员;
C、 公有继承的保护成员;
D、私有继承的公有成员。
41.下列表示引用的方法中,正确的是( A )。
(A)int m=10; int &x=m;(B) int m=10; int &y=10;
(C) int m=10; int &z;(D)int m=10; ifloat &t=&m;
42.下列标识符中,( C )是文件作用域。
(A) 函数形参(B)语句标号
(C) 外部静态标识符(D) 自动类标识符
43.在程序中,函数声明语句正确位置是(D )
(A) 随便任何位置
(B) 不包含在另一函数中的任何位置。
(C) 该函数使用前的任何位置
(D) 该函数使用前的任何位置,但不包含在另一函数中
44.下面有关函数重载的程序段正确的是(A ) 。
(A) int fun(int x, int y); int fun(float x, float y);
(B) int fun(int x, int y); int fun(int a, int b);
(C) float fun(int x, int y); int fun(int x, int y);
( D) int main(); void main();
10
45.返回类型就是函数返回结果值的数据类型。返回类型可以是(C )
(A) 除数组和类以外的任意数据类型
(B) 除数组和结构类型以外的任意数据类型
篇二:C++习题4
习题4
1、 下列对模板的声明,正确的是____C_____。
A)template<T
B)template<class T1,T2
C)template<class T1,class T2
D)template<C1ass T1,class T2
2、 一个_____C____允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。
A)函数模板
B)模板甲数
C)类模板
D)模板类
3、 类模板的模板参数____D_____。
A)只可作为数据成员的类型
B)只可作为成员函数的返回类型
C)只可作为成员函数的参数类型
D)以上三者皆可
11
4、 下列程序段中有错的是____C_____。
A)template <Class Type
B)Type
C)func(Type a,b)
D){return (ab)?(a):(b);}
5、 模板是实现类属机制的一种工具,其功能非常强大,它既允许用户构造类属函数,即___BA?___:也允许用户构造类属类,即___DC?___。
A)模板函数
B)函数模板
C)模板类
D)类模板
6、 类模板的使用实际上是将类模板实例化成一个具体的____DB_____。
A)类
B)对象
C)函数
D)模板类
7、 关于函数模板,描述错误的是( DA )
A) 函数模板必须由程序员实例化为可执行的函数模板
B) 函数模板的实例化由编译器实现
C) 一个类定义中,只要有一个函数模板,则这个类是类
12
模板
D) 类模板的成员函数都是函数模板,类模板实例化后,成
员函数也随之实例化
8、 下列的模板说明中,正确提( AC )(两个答案)
A) template <typename T1, typename T2
B) template <class T1, T2
C) template <class T1, class T2
D) template <typename T1; typename T2
9、 假设有函数模板定义如下:
Template <typename T
Max(T a, T b, T &c)
{ c=a+b; }
下列选项正确的是( AB )(两个答案)
A) float x,y; float z; Max(x,y,z);
B) int x,y,z; Max(x,y,z);
C) int x,y; float z; Max(x,y,z);
D) float x; int y, z; Max(x,y,z);
10、关于类模板,描述错误的是( B D )
A) 一个普通基类不能派生类模板
B) 类模板从普通类派生,也可以从类模板派生
C) 根据建立对象时的实际数据类型,编译器把类模板实
例化为模板类
13
D) 函数的类模板参数须通过构造函数实例化
11、建立类模板对象的实例化过程为( C )
A) 基类派生类 B) 构造函数对象
C) 模板类对象 D) 模板类模板函数
12、需要一种逻辑功能能一样的函数,而编制这些函数的程序文本完全一样,区别只是数据类型不同。对于这种函数,下面不能用来实现这一功能的选项是(D)
A)宏函数
B)为各种类型都重载这一函数
C)模板
D)友元函数
13 假设Aclass为抽象类,下列正确的说明语句是(B).
A Aclass fun(int)B Aclass *p Cint fun(Aclass)D Aclass
Obj
14 下面描述中,正确的是(D).
A 虚函数是没有实现的函数B 纯虚函数是返回值等于0的函数
C抽象类是只有纯虚函数的类D 抽象类指针可以指向不同的派生类 15 C++中,一个接口可以继承(D)个父接口。
A 0 B 1C 2 D 多个
16 有以下程序段,请写出程序的运行结果:S T。
class S{
14
public:
~S( ){cout<<”S”<<”\t”; } };
char fun0() { S s1; throw(‘T’); return ‘0’; }
void main(){
try{cout<<fun0()<<”\t”;}
catch(char c) {cout<<c<<”\t”;}}
17 对于C++而言,
测试的最小单位一般是类。
18接口的抽象方法的访问限制符默认为public。
1.1C++程序将可能发生异常的程序块放在中,紧跟其后可放置若干个对应的 catch,在前面所说的块中或块所调用的函数中应该有对应的 throw ,由它在不正常时抛出 异常 ,如与某一条 catch 类型相匹配,则执行该语句。该语句执行完之后,如未退出程序,则执行 catch后续语句 。如没有匹配的语句,则交给C++
库中的
1.2 throw表达式的行为有些像函数的,而catch子句则有些像函数的 函数定义 。函数的调用和异常处理的主要区别在于:建立函数调用所需的信息在 编译 时已经获得,而异常处理机制要求 运行 时的支撑。对于函数,编译器知道在哪个调用点上函数被真正调用;而对于异常处理,异常是 随机 发生的,并沿调用链逆向 查找异常处理子句,这与 运行时的 多态是 不一样的 。
3.l 下列关于异常的叙述错误的是(A)。
15
A(编译错属于异常,可以抛出
B(运行错属于异常
C(硬件故障也可当异常抛出
D(只要是编程者认为是异常的都可当异常抛出
3.2下列叙述错误的是( )。
A(throw语句须书写在时语句块中
B(throw语句必须在try语句块中直接运行或通过调用函数运行
C(一个程序中可以有try语句而没有throw语句
D(throw语句抛出的异常可以不被捕获
3.3 关于函数声明 float fun(int a,int b)throw,下列叙述正确的是( )。
A(表明函数抛出float类型异常
B(表明函数抛出任何类型异常
C(表明函数不抛出任何类型异常
D(表明函数实际抛出的异常
3.4下列叙述错误的是()。
A(catch(…)语句可捕获所有类型的异常
B(一个try语句可以有多个catch语句
C(catch(…)语句可以放在catch语句组的中间
D(程序中try语句与catch语句是一个整体,缺一不可
3.5下列程序运行结果为(A)。
16
#include<iostream
using namespace std;
class S{
public:
~S( ){cout<<”S”<<”\t”; }
};
char fun0() {
S s1;
throw(‘T’);
return ‘0’;
}
void main(){
try{
cout<<fun0()<<”\t”;}
catch(char c) {
cout<<c<<”\t”;}
}
A(S TB(O S T
4.写出程序运行结果
4.1#include <iostream
using namespace std;
int a[10]={1,2, 3, 4, 5, 6, 7, 8, 9, 10};int fun( int i);
17
void main()
{int i ,s=0;
for( i=0;i<=10;i++)
{ try
{ s=s+fun(i);}
catch(int)
{cout<<”数组下标越界!”<<endl;} }
cout<<s=”<<s<<endl;
}
int fun( int i)
{if(i=10)
throw i;
return a[i];
}
数组下标越界!
S=55
4.2 #include <iostream
using namespace std;
void f(); C(O T D(T
class T
{public:
T( )
18
{cout<<constructor<<endl; try
{throw exception;} catch( char*)
{cout<<exception”<<endl;} throw
exception; }
~T( ) {cout<<destructor;}};
void main()
{cout<<main function”<< endl;try{ f( ); }
catch( char *)
{ cout<<exception2<<endl;}cout<<main
function”<<endl; }
void f( )
{ T t; }
main function
constructor
exception
exception2
main function
篇三:C 类模板的使用
相关热词搜索:调用 函数 模板 成员 c语言函数调用
c++调用c函数
19
20