C++错题记录
1、下列属于低级语言的是( )。 A、C语言 B、Java C、机器语言 D、C# 【答疑编号11307952,点击提问】【删除】 【正确答案】 C 【答案解析】 机器语言和汇编语言属于低级语言一类,因为它们能够直接操纵计算机的寄存器和内存。参见教材P29。
8、下列不属于结构化程序设计方法的特点的是( )。 A、强调数据类型和程序结构 B、注重程序的易读性 C、交互式界面及分布式系统 D、可靠性及可维护性 【答疑编号11307965,点击提问】【删除】 【正确答案】 C 【答案解析】 在面向对象程序设计方法出现之前,软件界广泛流行的主流设计方法之一是结构化程序设计方法,也称为面向过程的设计方法。这个概念最早是由E.W.Dijkstra在1965年提出的,它是软件发展的一个重要里程碑。这个时期的程序设计语言以Pascal语言和C语言为代表,强调数据类型和程序结构,注重程序的易读性、可靠性及可维护性。注意说的是不属于,然后C答案是面对对象的
10、C++中用数据表示对象的( )。 A、初始化 B、数组 C、属性 D、操作 【答疑编号11307967,点击提问】【删除】 【正确答案】 C 【答案解析】 C++中使用对象名、属性和操作三要素来描述对象。用数据表示对象的属性,用函数实现操作。参见教材P63。
18、下列选项中,最小的作用域是( )。 A、函数原型作用域 B、局部作用域 C、类作用域 D、命名空间作用域 【答疑编号11307986,点击提问】【删除】 【正确答案】 A 【答案解析】 函数原型作用域是是C++程序中最小的作用域。比如double area (double radius); radius被限制在括号之间
20、类X的成员m具有类作用域,对m的访问不成功的是( )。 A、x.m B、X::m C、ptr->m D、X.m 【答疑编号11307989,点击提问】【删除】 【正确答案】 D 【答案解析】 类可以被看成是一组有名字的成员的集合,类X的成员m具有类作用域,对m的访问方式有如下3种: 1)如果在类X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员m。也就是说,m在这样的函数中起作用。 2)在类外,可以通过表达式x.m或者X::m来访问,其中x是类X的对象。这正是程序中访问对象成员的最基本方法。当然,这样的访问不能违反m的访问修饰符的限定。 3)在类外,可以通过ptr->m这样的表达式来访问,其中ptr为指向类X的一个对象的指针。当然,这样的访问不能违反m的访问修饰符的限定
10、封装体现的特点是将对象的( )及实现细节隐藏起来,只给出如何使用的信息。 A、操作 B、数组 C、属性 D、元组 【答疑编号11307969,点击提问】【删除】 【正确答案】 C 【答案解析】 封装体现的特点是将对象的属性及实现细节隐藏起来,只给出如何使用的信息。参见教材P65。
13、下列不能访问对象中的成员的是( )。 A、通过对象名和成员运算符访问对象中的成员 B、通过指向对象的指针访问对象中的成员 C、通过指向成员的指针访问对象中的成员 (可以指向对象的指针访问,但是指向成员的指针怎么访问?肯定不对) D、通过对象的引用变量访问对象中的成员 【答疑编号11307978,点击提问】【删除】 【正确答案】 C 【答案解析】 C++中访问对象中的成员的三种方式: 通过对象名和成员运算符访问对象中的成员; 通过指向对象的指针访问对象中的成员; 通过对象的引用变量访问对象中的成员。参见教材P76。
19、命名空间作用域的一般形式是( )。 A、命名空间名::标识符名 B、命名空间名:标识符名 C、标识符名::命名空间名 D、标识符名:命名空间名 【答疑编号11307988,点击提问】【删除】 【正确答案】 A 【答案解析】 命名空间作用域的一般形式是:命名空间名::标识符名
using namespace std; // 第一个命名空间 namespace first_space{ void func(){ cout << "Inside first_space" << endl; } } // 第二个命名空间 namespace second_space{ void func(){ cout << "Inside second_space" << endl; } } int main () { // 调用第一个命名空间中的函数 first_space::func(); // 调用第二个命名空间中的函数 second_space::func(); return 0; }
19、下列关于重载强制类型转换运算符时,叙述正确的是( )。 A、不需要指定返回值类型 B、需要指定返回值类型 C、返回值类型是不确定的 D、返回值类型与运算符本身代表的类型不同 您未做该题 正确答案:A 得 分:0.0 分 【答疑编号11308037,点击提问】 解析:重载强制类型转换运算符时,不需要指定返回值类型,因为返回值类型是确定的,就是运算符本身代表的类型。 看看代码: class Box { double width; public: double length; void setWidth( double wid ){ width = wid; } //重载强制类型转换运算符 double 注意不需要返回值类型 operator double() { return length; } }; 调用: Box box10; box10.length=1.2; //显式调用为 box10.operator double(); double d10=2+box10; cout<<"d10="<<d10<<endl; 输出:3.2
19、如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。 A、a.operator++(1) B、operator++(a) C、operator++(a,1) D、a.operator++() 正确答案:D 【答疑编号11308038,点击提问】 解析:如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为“obj.operator++()”。 那么问题来了,如果这里定义为友元呢?是如何调用呢。 代码如下 class Box { public: int num1; //定义重载友元运算符 自增 friend Box operator ++(Box &b1); }; 类外实现友元 //定义重载友元运算符 自增 Box operator ++(Box &b1) { b1.num1++; return b1; } 调用 //友元方式重载++运算符前置 后置要(int) box10.num1=1; operator++(box10); //这是显式调用 其实可以 ++box10 注意一下这是友元,需要传多一个参数对象,如果是成员函数重载的话我们就是 a.operator++() 前置 a.operator++(int) 后置
cout<<"num1="<<box10.num1<<endl; 输出:2
19、设有类A的对象Aobject,若用友元函数重载后置自减运算符,则Aobject--被编译器解释为( )。 A、Aobject.operator--0 B、operator--(Aobject,0) C、(Aobject,0)-- D、--(Aobject,0) 正确答案:B 其实上题的实验很清楚了 因为这里提到后置的友元 operator--(Aobject)前置 operator--(Aobject,0)后置
9、下列不是描述类的成员函数的是( )。 A、构造函数 B、析构函数 (这家伙不算是类的成员函数,他是个垃圾桶) C、友元函数 D、拷贝构造函数 【正确答案】 B 【答案解析】友元函数不是类的成员函数,但允许访问类中的所有成员。参见教材P129。
3、在函数中声明的静态变量( )。 A、在函数体中可见,程序结束时释放占用的空间 B、在函数体可见,函数执行结束时释放占用的空间 C、在程序中可见,函数执行结束时释放占用的空间 D、在程序中可见,程序结束时不释放占用的空间 正确答案:A 其实函数中的静态变量一直存在是在我们调用函数时也是能快速使用的,它就是一个备胎,然后程序死了一切都会没有。但是这个东西在其他地方不可见哦,只能在函数体内可见.
6、下列正确的在构造函数中添加初始化列表的写法是( )。 A、构造函数名:类名(参数表): 成员变量1(参数表), 成员变量2(参数表), ... { ...} B、类名:构造函数名(参数表): 成员变量1(参数表), 成员变量2(参数表), ... { ...} C、类名::构造函数名(参数表): 成员变量1(参数表), 成员变量2(参数表), ... { ...} D、构造函数名::类名(参数表): 成员变量1(参数表), 成员变量2(参数表), ... { ...} 正确答案:C 【答疑编号11308011,点击提问】 解析:在封闭类构造函数中添加初始化列表的格式如下: class Student{ private: char *m_name; int m_age; float m_score; public: Student(char *name, int age, float score); void show(); }; //采用初始化列表 Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ //TODO: }
注意其实这里C和D答案很奇怪,就算是C名和构造名本来一样的,在程序编写角度说都能运行.只是概念问题.
11、下列属于成员指针访问运算符的是( )。 A、[] B、* C、-> D、->* 您未做该题 正确答案:D 得 分:0.0 分 【答疑编号11308023,点击提问】 解析:成员指针访问运算符:“.*”“->*” 看到指针想到*就对了
5、下列关于静态局部变量正确的是( )。 A、静态局部变量可以多次初始化 B、静态局部变量只执行一次初始化 C、如果程序未显式给出初始值,则相当于初始化为null D、如果显式给出初始值,则在该静态变量在程序开始时完成初始化 【答疑编号11308001,点击提问】【删除】 【正确答案】 B 【答案解析】 静态变量均存储在全局数据区,静态局部变量只执行一次初始化。如果程序未显式给出初始值,则相当于初始化为0;如果显式给出初始值,则在该静态变量所在块第一次执行时完成初始化
6、cin和cout是在头文件iostream中说明的具有( )的标识符。 A、块 B、类作用域 C、函数作用域 D、文件作用域 【答疑编号11308003,点击提问】【删除】 【正确答案】 D 【答案解析】 cin和cout是在头文件iostream中说明的具有文件作用域的标识符,它们的作用域也延伸到使用#include语句包含iostream的文件中
12、C++规定,“=”只能重载为( )。 A、构造函数 B、友元函数 C、成员函数 D、复制函数 只能是成员函数。
20、如果表达式++j*k中的++和*都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可以表示为( )。 A、operator*(j.operator++(), k) B、operator*(operator++(j), k) C、operator++(j).operator*(k) D、operator*(operator++(j),) 【答疑编号11308041,点击提问】【删除】 【正确答案】 B
分析一下 这里重点友元 那还想啥呢,直接去掉对象名的但是好像都去掉了,A答案呢,友元的话 j.operator++()这家伙是空的,排除 B答案对的,C呢这种形式不对 D呢 K又没传进去,因为这里
++j*k K肯定要一起算得.
年轻人要讲武德,好自为之.