1、国家二级( C+)机试模拟试卷 100及答案与解析 一、选择题 1 下列符号中,正确的 C+标识符是 ( )。 ( A) enum ( B) 2b ( C) foo-9 ( D) _32 2 有如下程序: #include using namespace std; class MyClass public: MyClass() cout #include using namespace std; class MyBag public: MyBag(string br,string cr):brand(br),color(cr) +count; MyBag() -count; static in
2、t GetCount() return count; private: string brand,color; static int count; ; _ int main() MyBag one(“CityLife“,“Gray“),two(“Micky“,“Red“); cout using namespace std; class CC int k; public: CC(int n):k(n) int get()const return k; ; int main() CC c3=CC(1),CC(2); return 0; 此程序编译时未能通过,原因是 ( A)数组只能定义为基本数据
3、类型 ( B)类 CC缺少复制构造函数 ( C)对象数组只能作为类的数据成员 ( D)类 CC缺少默认的构造函数 12 ( A)并 ( B)投影 ( C)交 ( D)选择 13 下列有关类成员的叙述中,错误的是 ( A)友元函数不是类的成员函数 ( B)类成 员的默认访问权限是私有的 ( C)类成员函数必须声明为公有的 ( D)类的静态数据成员可以是常成员 14 若 MyTemp 是一个只有一个虚拟类型参数的类模板,且有如下语句序列 MyTemp p1; MyTemp p2; MyTemp p34; 编译系统在处理上面的语句序列时,所生成的模板 MyTemp 的实例的个数是 ( A) 1 (
4、B) 2 ( C) 3 ( D) 6 15 有如下程序: #include using namespace std; int main() int *p; *p = 9; cout using namespace std; class Sample public: Sample() Sample() cout #include using namespace std; class MyBag public: MyBag(string br=“ABC“):brand(br) cout ( C) =-1 将输入流 is中读到的字符存入 str中,直到遇到终结符 delim才结束。对于第一个函数 d
5、elim是可以由用户自己定义的终结符;对于第二个函数 delim默认为 n(换行符 )。 函数在输入流 is中遇到文件结束符( EOF)或者在读入字符的过程中遇到错误都会结束。 在遇到终结符 delim后, delim会被丢弃,不存入 str中。在下次读入操作时,将在 delim的下个字符开始读入。所以 A选项错误。 39 【正确答案】 D 【试题解析】 函数可以不需要返回值,即 void 型的,函数可以没有参数,所以AB 选项正确,函数可以作为类的成员函数,所以 C正确, D错误。 40 【正确答案】 D 【试题解析】 本题考查虚函数的运用,本题中定义 Dogd;Type(d)时,执行基类的
6、 Type函数,输出 Animal,然后输出 speak,然后执行派生类的 Speak 函数输出Woof,最后输出 -,同理 cat输出类似,所以结果为 D选项正确。 二、基本操作题 41 【正确答案】 (1)MyClass(intval): value(val) (2)voidMyClass: SetValue(intval)value=val; (3)cout“thevalueis“obj GetValue()end1; 【试题解析】 (1)考查构造函数,定义构造函数时不能使用 void,直 接使用MyClass(intval)即可。 (2)主要考查成员函数定义,类的成员函数定义时要使用前
7、缀 MyClass,而 inline是内联函数的关键字,在此是错误的,应该删掉 inline并在函数名前加上前缀MyClass,即 voidMyClass: SetValue(intval)value=val; 。 (3)考查成员函数调用, value是私有成员,在主函数中不能直接调用 value,可以使用成员函数 GetValue()来得到 value的值。 三、简单应用题 42 【正确答案】 (1)brand = new charstrlen(the_brand) + 1; (2)strcpy(number, the_number); (3)category() (4)AutoMobile
8、:show(); 【试题解析】 (1)主要考查考生对动态分配的掌握情况 ,要复制字符串就要先给brand 分配空间。 (2)主要考查考生对 strcpy函数的掌握情况 ,该函数用于复制字符串。 (3)主要考查考生对成员函数的掌握情况 ,纯虚函数 category()返回汽车类型。 (4)主要考查考生对虚函数的掌握情况 ,调用基类的虚函数 show。 四、综合应用题 43 【正确答案】 MiniString( const char *s = “ “) length = strlen(s); sPtr = new charlength+1; strcpy(sPtr, s); MiniString() delete sPtr; 【试题解析】 主要考查考生对构造函数和析构函数的掌握 ,题目要求完成默认构造函数和析构函数 ,先看私有成员 : int length; / 字符串长度 (不超过 100个字符 ) char *sPtr; / 指向字符串起始位置 因此先使用 strlen 函数计算字符串长度 ,然后给 sPtr分配空间 ,再使用 strcpy复制字符串 ,最后在折构函数中使用 delete语句释放空间。