21秋西交《面向对象程序设计》在线作业[答案]答案
西交《面向对象程序设计》在线作业
试卷总分:100 得分:100
一、单选题 (共 30 道试题,共 60 分)
1.函数重载是指( )。
A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C.两个以上的函数名字不同,但形参的个数或类型相同
D.两个以上的函数取相同的函数名,并且函数的返回类型相同
正确答案:-----
2.下列程序段不会发生二义性的是( )。
A.intfun(doublep){...;}
正确答案:-----
B.intfun(floatp){...;} floatfun(floatp){...;}floatfun(unsignedp){...;} intx;intx; x=fun(0);x=fun(0);
正确答案:-----
C.intfun(inti,intj=2){...;}
D.intfun(inti=2,intj=2){...;} floatfun(inti){...;}intfun(int*p){...;} cout< 正确答案:----- 3.下列说法错误的是()。 A.在类中不能对所定义的数据成员进行初始化; B.类的公有成员函数是类与外界的接口 C.同一个类的两个对象占用相同的内存空间; D.类实现数据隐藏。 正确答案:----- 4.假定一个类的构造函数为 “B(int ax, int bx): a(ax), b(bx) {}”,执行 “B x(1,2),y(3,4);x=y;”语句序列后x.a的值为( )。 正确答案:----- A.1 B.2 C.3 D.4 正确答案:----- 5.由C++源程序文件编译而成的目标文件的缺省扩展名为()。 A.cpp B.exe C.obj D.lik 正确答案:----- 6.假定AB为一个类,则执行“AB*p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。 正确答案:----- A.0 B.1 C.2 D.3 正确答案:----- 7.下面的类中,( )不是由抽象基类ios直接派生出来的。 A.istream B.ostream C.iostream D.fstreambase 正确答案:----- 8.能够释放对象所占资源的是( )。 A.析构函数 B.数据成员 C.构造函数 D.静态成员函数 正确答案:----- 9.派生类的构造函数的成员初始化列表中,不能包含()。 A.基类的构造函数; B.派生类中子对象的初始化; C.基类的子对象初始化; D.派生类中一般数据成员的初始化; 正确答案:----- 10.如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。 正确答案:----- A.operator+(b) B.operator+(a) C.operator+(a,b) D.operator(a+b) 正确答案:----- 11.在关键字private后面定义的成员为类的( )成员。 A.私有 B.公用 C.保护 D.任何 正确答案:----- 12.下面是四条顺序出现的声明语句,非法的初始化语句是()。 A.int i = –1; 正确答案:----- B.const int ic=i; C.const int *pc=⁣ D.int *const cpi=⁣ 正确答案:----- 13.一个类的析构函数通常被定义为该类的()成员。 A.私有 B.保护 C.公用 D.友元 正确答案:----- 正确答案:----- 14.关于运行时多态的下列描述中,()是错误的。 A.运行时多态是以虚函数为基础的; B.运行时多态是在运行时确定所调用的函数代码的; C.用基类指针或引用所标识的派生类对象来操作虚函数才能实现运行时多态; D.运行时多态是在编译时确定操作函数的。 正确答案:----- 15.下列关于类的访问控制机制说法错误的是()。 A.静态数据成员通常都定义为公有类型。 B.一个对象的私有成员对于同类的另一个对象是可见的 C.友元机制破坏了类的封装性。 D.基类的保护成员对派生类新定义的成员函数是可见的。 正确答案:----- 16.C++的继承性允许派生类继承基类的( )。 A.部分特性,并允许增加ABC特性或重定义基类的特性 B.部分特性,但不允许增加ABC特性或重定义基类的特性 C.所有特性,并允许增加ABC特性或重定义基类的特性 D.所有特性,但不允许增加ABC特性或重定义基类的特性 正确答案:----- 17.面向对象软件开发中使用的OOA表示( )。 A.面向对象分析 B.面向对象设计 C.面向对象语言 D.面向对象方法 正确答案:----- 21.构造函数不具备的特征是( )。 A.构造函数的函数名与类名相同 B.构造函数可以重载 C.构造函数可以设置默认参数 D.构造函数必须指定类型说明 正确答案:----- 19.设置虚基类的目的是( )。 A.简化程序; B.消除二义性; C.提高运行效率; D.减少目标代码; 正确答案:----- 20.使用如setfill()的操作符对数据进行格式输出时,应包含( )头文件。 A.iostream B.fstream C.iomanip D.stdlib 正确答案:----- 21.若需要使类中的一个指针成员指向一块动态存储空间,则通常在( )函数中完成。 A.析构 B.构造 C.任一成员 D.友元 22.下列关于私有继承的说法中正确的是()。 A.基类成员对派生类新定义的成员函数是不可见的; B.基类成员对派生类新定义的成员函数是可见的; C.只有基类成员中的公有成员对派生类新定义的成员函数是可见的; D.基类成员中的保护成员对派生类新定义的成员函数是可见的。 正确答案:----- 23.继承机制的作用是( )。 A.信息隐藏 B.数据封装 C.定义新类 D.数据抽象 正确答案:----- 24.假定AB为一个类,则执行AB x;语句时将自动调用该类的( ) A.有参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值构造函数 正确答案:----- 25.派生类可以访问其基类的( )。 A.公用成员 B.保护成员 C.私有派生 D.公用和保护成员 正确答案:----- 26.下列说法不正确的是( )。 A.在类中,成员的默认访问特性是私有的。 B.类封装了数据和操作。 C.类实质上是一种数据类型。 D.在类的定义中,必须包含private、public 正确答案:----- E.protected三种存取方式对应得部分。 正确答案:----- 27.关于new运算符的下列描述中,_____是错误的。 A.他可以用来动态创建对象和对象数组 B.使用它创建的对象或对象数组,可以使用运算符delete删除 正确答案:----- C.使用它创建对象时要调用构造函数 D.使用它创建对象数组时必须指定初始值 正确答案:----- 28.对于类模板,其类型形参可以作为______。 A.成员函数的形参类型 B.成员函数的返回类型 C.数据成员的类型 D.其他三种均可 正确答案:----- 29.在公有继承的情况下,基类成员在派生类中的访问权限( ) A.受限制 B.保持不变 C.受保护 D.不受保护 正确答案:----- 正确答案:----- 30.在公用继承的情况下,基类成员在派生类中的访问权限( ) A.受限制 B.保持不变 C.受保护 D.不受保护 21秋西交《面向对象程序设计》在线作业[答案]多选题答案 二、判断题 (共 20 道试题,共 40 分) 31.析构函数必须指定返回类型以及函数参数。( ) 32.对于从基类继承的虚函数,派生类也可以不进行重定义。( ) 33.引用可以不初始化。( ) 34.C++只能用于面向对象程序设计,不适用于面向过程程序设计。( ) 35.纯虚函数是在基类中说明的虚函数,它在该基类中必须定义具体的操作内容。( ) 36.将运算符“+”函数重载为类的成员函数,交换律不适用。( ) 正确答案:----- 37.字符串"sdfgh"的长度是5。( ) 正确答案:----- 38.在类的继承层次结构中,在不同的层次中不能出现名字相同、参数个数和类型都相同而功能不同的函数。( ) 39.C++语言支持封装性和继承性,不支持多态性。( )。 40.在C++中,在文件中只能用“#include 正确答案:----- 41.变量必须先定义后赋值。( ) 42.引用和指针都可作函数参数。( ) 43.使用虚函数可以避免多重继承产生的二义性。( ) 44.关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。( ) 45.若类Y是类X的私有派生类,类Z是类Y的公用派生类,则类Z不能访问类X 的公用成员和保护成员。( ) 46.成员函数中调用的虚函数可能实现动态联编。( ) 47.运算符重载以后,其优先级和结合性都不能改变。( ) 48.派生类能够继承基类的析构函数。( ) 49.抽象类中只能有一个纯虚函数。( ) 50.程序运行过程出现异常是由于语法错误引起的。( ) 21秋西交《面向对象程序设计》在线作业[答案]历年参考题目如下: 2021学期(1709、2103、2109、1903、1909、2003、2009、2103)《面向对象程序设计》在线作业 试卷总分:100 得分:100 一、单选题 (共 35 道试题,共 70 分) 1.撤消对象时,系统自动调用( )函数。 A.成员函数 B.构造函数 C.析构函数 D.普通函数 2.在一个类中,可以对一个操作符进行()重载。 A.1种 B.2种 C.3种 D.多种 3.下面函数原型声明中,( )声明了fun为纯虚函数。 A.void fun()=0; B.virtual void fun()=0; C.virtual void fun(); D.virtual void fun(){}; 4.对于任意一个类,析构函数的个数最多为( )。 A.0 B.1 C.2 D.3 5.下列表示引用的方法中,( )是正确的。 已知:int k=1000; A.int &x=k; B.char &y; C.int &z=1000; D.float &t=&k; 6.抽象类的作用主要是()。 A.直接用作基类 B.直接用作指针 C.引用的基类型 D.包括以上各项 7.下面关于构造函数和析构函数的描述,错误的是()。 A.析构函数中调用虚函数采用静态联编 B.对虚析构函数的调用可以采用动态联编 C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数 D.构造函数可以声明为虚函数 8.由于数据隐藏的需要,静态数据成员通常被说明为( )。 A.私有的 B.公有的 C.保护的 D.不可访问的 9.下列关于赋值运算符重载的说法中正确的是()。 A.返回值一般是以引用方式返回的对象,而函数体中总是用语句“return *this;”返回this指针所指向的对象 B.赋值运算符只能以非成员函数的方式重载 C.赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载 D.以上均不正确 10.对于类定义 class A{ public: virtual void funcl(){} void func2(){} }; class B:public A{ public: void func1(){cout<<"class B func1"< A.A::func2()和B::func1()都是虚函数 B.A::func2()和B::func1()都不是虚函数 C.B::func1()是虚函数,A::func2()不是虚函数 D.B::func1()不是虚函数,A::func2()是虚函数 11.下列引用的定义中,( )是错误的。 A.int i; int &j=i; B.int i; int &j; j=i; C.float i; float &j=i; D.char d; char &k=d; 12.一个( )允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值可以取任意数据类型。 A.函数模板 B.模板函数 C.类模板 D.模板类 13.()是一个在基类中说明虚函数,它在该基类中没有定义,但要求任何派生类中的可访问性的规定是相同的。 A.纯虚函数 B.虚析构函数 C.虚构造函数 D.静态成员函数 14.下列静态数据成员的特性中,( )是错误的。 A.说明静态数据成员时前边要加关键字static来修饰 B.静态数据成员在类体外进行初始化 C.引用静态数据成员时,要在静态数据成员名前加和作用域运算符 D.静态数据成员不是所有对象所共有的 15.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( )。 A.public成员 B.private成员 C.protected成员 D.友元 16.若一个类中含有纯虚函数,则该类称为( )。 A.基类 B.纯基类 C.派生类 D.抽象类 17.声明一个类的对象时,系统自动调用( )函数。 A.成员函数 B.构造函数 C.析构函数 D.普通函数 21.关于纯虚函数和抽象类的描述中,错误的是()。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现。 B.抽象类是指具有纯虚函数的类。 C.一个基类中有纯虚函数,该类的派生类一定不再是抽象类。 D.抽象类作为基类来使用,其纯虚函数的实现由派生类给出。 19.使用string类,必须在程序中包含头文件()。 A.string.h B.string C.cstring.h D.cstring 20.交换两个string类对象所表示的字符串的内容,应该使用string类的()函数。 A.assign B.insert C.swap D.find 21.对基类和派生类的描述中错误的是( )。 A.派生类是基类的具体化 B.基类继承了派生类的属性 C.派生类是基类定义的延续 D.派生类是基类的特殊化 22.要求打开文件 d:file.dat,可写入数据,正确的语句是( )。 A.ifstream infile("d:file.dat", ios::in); B.ifstream infile("d:file.dat", ios::in); C.ofstream infile("d:file.dat", ios::out); D.fstream infile("d:file.dat", ios::in| ios::out); 23.在下列关键字中,用以说明类中公有成员的是( )。 A.public B.private C.protected D.friend 24.关于下面程序段说法正确的是( ) class X { private: int n; public: X(X&); }; X::X(X&x) {n=x.n} X obj1,obj2(obj1); A.语句obj2(obj1);的功能是用对象obj1初始化具有相同类类型的对象obj2 B.语句obj2(obj1);的功能是用对象obj2初始化具有相同类类型的对象obj1 C.X(X&x)中的&符号可以删除 D.X(X&x)函数中不能访问对象的私有成员 25.( )只能访问静态成员变量,不能访问非静态成员变量。 A.静态函数 B.虚函数 C.构造函数 D.析构函数 26.下列关于this指针的说法,错误的是()。 A.this指针指向当前正在操作的对象 B.this指针只存在于非静态成员函数中 C.在成员函数中对非静态数据成员的访问是通过this指针完成的 D.静态成员函数中可以通过this指针访问非静态成员 27.下面关于友元的描述中,错误的是( )。 A.友元函数可以访问该类的私有数据成员 B.一个类的友元类中的成员函数都是这个类的友元函数 C.友元可以提高程序的运行效率 D.类与类之间的友元关系可以继承 28.类模板的使用实际上是类模板实例化成一个具体的( )。 A.类 B.对象 C.函数 D.变量 29.下列关于运算符重载正确的是()。 A.运算符重载可以改变运算符的操作数个数 B.运算符重载可以改变运算符的优先级 C.运算符重载可以改变运算符的结合性 D.运算符重载不可以改变语法结构