1、2. 友元重载运算符obj1obj2被C+编译器解释为()。A. operator(obj1,obj2)B. C. obj1.operator(obj2)D. obj2.operator(obj1)A3. 下面关于私有继承方式的论述中错误的是()。A. 基类中的私有成员对其对象不可见B. 基类中的私有成员对其派生类不可见C. 基类中的公有成员对其派生类可见D. 基类中的保护成员对其派生类不可见4. 类的默认的无参构造函数()。A. 在任何情况下都存在B. 仅当未定义无参构造函数时存在C. 仅当未定义有参构造函数时存在D. 仅当未定义任何构造函数时存在5. 若类中有指针成员变量,则应编写(),使
2、得在对象销毁时能够自动调用该函数释放指针成员变量所指向的内存空间。A. 友元函数B. 虚函数C. 构造函数D. 析构函数6. 下列关于拷贝构造函数的描述中,错误的是()。A. 一个类可以定义多个拷贝构造函数B. 若未定义拷贝构造函数,则系统会提供一个默认拷贝构造函数C. 当类中有指针成员变量时,通常要为这个类定义一个拷贝构造函数来实现深拷贝D. 拷贝构造函数中的参数按引用方式传递7. 下列关于虚函数的说明中,正确的是()。A. 从虚基类继承的函数都是虚函数B. 虚函数不得是静态成员函数C. 只能通过指针或引用调用虚函数D. 抽象类中的成员函数都是虚函数B8. 已知“int a=10,b=8;i
3、nt &r=a; r=b;couta,br;”,则输出为()。A. 10,8,10B. 10,8,8C. 8,8,10D. 8,8,89. 在一个string类对象表示的字符串中插入新字符,应该使用string类的()函数。A. assignB. insertC. swapD. find10. 有如下类声明: class Sample int x; ; 则Sample类成员x是Sample类的()。A. 公有数据成员B. 保护数据成员C. 私有数据成员D. 以上选项都不正确C11. 运算符重载的目的是()。A. 提高程序的效率B. 提高代码复用能力C. 简化程序,减少目标代码D. 使程序代码直
4、观易读12. 执行语句“string str(abc);”时,系统会自动调用string类的构造函数()。A. string()B. string(const char *s)C. string(const string &str)D. string(size_type n, char c)13. 交换两个string类对象所表示的字符串的内容,应该使用string类的()函数。14. 基类的()在私有继承时在派生类中为私有成员函数,在公有和保护继承时在派生类中为保护成员函数。A. 私有成员函数B. 保护成员函数C. 公有成员D. 保护数据成员15. 多继承的构造函数顺序可分为如下4步: 所有
5、非虚基类的构造函数按照它们被继承的顺序构造。 所有虚基类的构造函数按照它们被继承的顺序构造。 所有子对象的构造函数按照它们声明的顺序构造。 派生类自己的构造函数体这四个步骤的正确顺序是()。A. B. C. D. 16. 已知“float *p; p=new float2;”,若分配成功,则指针p在堆中获得的字节数为()。A. 2B. 4C. 8D. 不确定17. 在一个C+源文件中使用了cin和cout,那么在这个源文件中必须包含()文件。A. iostreamB. fstreamC. stdio.hD. stdlib.h18. 虚函数必须是类的()。B. 成员函数19. 在一个string
6、类对象表示的字符串中查找子串,应该使用string类的()函数。20. 有关重载函数的描述正确的是()。A. 函数名相同的函数就是重载函数B. 函数名相同但返回值类型不同的函数就是重载函数C. 函数名相同但参数个数或类型不同的函数就是重载函数D. 函数功能相同的函数就是重载函数21. 单目运算符作为类成员函数重载时()。A. 有形参B. 没有形参C. 有实参D. 以上都不正确22. 下列关于运算符重载正确的是()。A. 运算符重载可以改变运算符的操作数个数B. 运算符重载可以改变运算符的优先级C. 运算符重载可以改变运算符的结合性D. 运算符重载不可以改变语法结构23. 使用string类,必
7、须在程序中包含头文件()。A. string.hB. stringC. cstring.hD. cstring24. 变量的引用,其含义是指该变量的()。A. 值B. 类型C. 别名D. 地址25. 下面对静态数据成员的描述中,正确的是()。A. 静态数据成员可以在类体内进行初始化B. 静态数据成员不可以被该类的对象调用C. 静态数据成员不能受private控制符的作用D. 静态数据成员可以直接用类名访问26. 一个类的友元函数或友元类能够通过成员操作符访问该类的()。A. 私有成员B. 保护成员D. 所有成员27. 下列虚基类的声明中,正确的是()。A. class virtual B:pu
8、blic AB. virtual class B:C. class B: public A virtualD. class B: virtual public A28. 下列关于赋值运算符重载的说法中正确的是()。A. 返回值一般是以引用方式返回的对象,而函数体中总是用语句“return *this;”返回this指针所指向的对象B. 赋值运算符只能以非成员函数的方式重载C. 赋值运算符既可以以成员函数的方式重载,又可以以非成员函数的方式重载D. 以上均不正确29. 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()。A. 派生类的对象可以直接访问基类的所有成员B. 派生
9、类的对象可以初始化基类的引用C. 派生类的对象不可以直接访问基类中的私有成员D. 派生类的对象的地址可以赋给指向基类的指针30. 已知“float *p;”,若要释放p所指向的堆中的这些字节,下列语句正确的是()。A. delete p;B. delete p;C. delete p;D. delete p2;31. 程序在调用重载函数时,根据()区分到底要调用哪个函数。A. 函数名B. 返回值类型C. 参数个数和类型D. 以上都可以32. 假定MyClass为一类,执行MyClass a,b(2),*p2;语句时会自动调用该类构造函数()次。B. 3C. 4D. 533. 下面关于类的成员函
10、数描述不正确的是()。A. 静态成员函数内可以直接访问类的非静态成员数据B. 静态成员函数内可以直接访问类的静态成员数据C. 非静态成员函数可以直接访问类的非静态成员数据D. 非静态成员函数可以直接访问类的静态成员数据34. 在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。A. operator+有两个参数,operator*有两个参数B. operator+有两个参数,operator*有一个参数C. operator+有一个参数,operator*有两个参数D. operator+有一个参数,operator*有一个参数35.
11、在C+中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。A. 继承B. 封装C. 多态D. 重载15春学期面向对象程序设计在线作业二、判断题(共 15 道试题,共 30 分。1. 在C+程序中,有且仅能有一个主函数,且其函数名必须是main。A. 错误B. 正确2. 在派生类构造函数的成员初始化列表中,可以包含基类构造函数的调用。3. 在C+中,允许从一个类派生出任意多个类,但不允许某个类同时从多个类派生。4. 抽象类不能定义对象,但可以声明抽象类的指针或引用。5. 派生类至少有一个基类。6. 基类类型的指针可以指向其派生类对象。7. 构造函数不能被派生类继承。8. 抽象类虽然也是
12、一种数据类型,但它不能建立对象,只能作为基类被其他类继承。9. 类中所提供的成员函数可以直接访问该类的私有成员。10. a为MyClass类对象,“static void SetRate(double r).”是MyClass类的静态成员函数,则执行语句“a.SetRate(0.05);”时,SetRate成员函数中的this指针指向对象a的地址。11. 在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。12. 一个类的静态数据成员被该类的所有对象共享。13. 私有继承中,对于基类中的所有成员,派生类的成员函数都不可直接访问。14. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: AB operator+(AB &,AB &15. 以友元方式重载运算符时,形参列表中至少有一个参数必须是自定义数据类型。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1