C试题附答案.docx
- 文档编号:28959124
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:13
- 大小:20.23KB
C试题附答案.docx
《C试题附答案.docx》由会员分享,可在线阅读,更多相关《C试题附答案.docx(13页珍藏版)》请在冰豆网上搜索。
C试题附答案
一、选择题:
1.关于类和对象不正确的说法是(C)
A)类是一种类型,它封装了数据和操作
B)对象是类的实例
C)一个类的对象只有一个
D)一个对象必属于某个类
2.在类定义的外部,可以被访问的成员有(C)
A)所有类成员B)private或protected的类成员
C)public的类成员D)public或private的类成员
3.关于this指针的说法错误的是(A)
A)this指针必须显示说明B)当创建一个对象后,this指针就指向该对象
C)成员函数拥有this指针D)静态成员函数不拥有this指针
4.声明一个类的对象时,系统自动调用(B)函数,撤消对象时,系统自动调
用(C)函数
A)成员函数B)构造函数C)析构函数D)普通函数
5.下面对构造函数的不正确描述是(B)
A)系统可以提供默认的构造函数B)构造函数可以有参数,所以可以有返回
值
C)构造函数可以重载D)构造函数可以设置默认参数
6.下面对析构函数的正确描述是(C)
A)系统不能提供默认的析构函数B)析构函数必须由用户定义
C)析构函数没有参数D)析构函数可以设置默认参数
7.对静态成员的不正确描述是(C)
A)静态成员不属于对象,是类的共享成员B)静态数据成员要在类外定义和初
始化
C)调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指
针
D)非静态成员函数也可以操作静态数据成员
8.下面选项中,不是类的成员函数为(C)
A)构造函数B)析构函数C)友元函数D)缺省参数的构造函数方言
9.下面对友元的错误描述是(D)
A)关键字friend用于声明友元
B)一个类的成员函数可以是另一个类的友元
C)友元函数访问对象的成员不受访问特性影响
D)友元函数通过this指针访问对象成员
10.在C++中,类与类之间的继承关系具有(C)
A)自反性B)对称性C)传递性D)反对称性
11.下列关于类的继承描述中,(A)是错误的
A)派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
B)派生类也是基类,但基类不一定具有派生类的全部属性和方法
C)继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
D)—个基类可以有多个派生类,一个派生类可以有多个基类
12.当一个派生类仅有继承一个基类时,基类中的所有公有成员成为派生类的
(A)
A)public成员B)private成员C)protected成员D)友元
13.当一个派生类私有继承一个基类时,基类中的所有仅有成员和保护成员成为
派生类的(B)
A)public成员B)private成员C)protected成员D)友元
14.不论派生类以何种方法继承基类,都不能使用基类的(B)
A)public成员B)private成员C)protected成员D)public成员和protected成员
15.下面描述中,错误的是(BC)(两个答案)
A)在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B)在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
C)在基类定义的public和protected成员在保护继承的派生类中不可见
D)在派生类中不可见的成员要变成可访问的,需要进行访问声明
16.在C++中,不能被派生类继承的函数是(BC)(两个答案)
A)成员函数B)构造函数C)析构函数D)静态成员函数
17.在创建派生类对象时,构造函数的执行顺序是(D)
A)对象成员构造函数、基类构造函数、派生类本身的构造函数
B)派生类本身的构造函数、基类构造函数、对象成员构造函数
C)基类构造函数、派生类本身的构造函数、对象成员构造函数
D)基类构造函数、对象成员构造函数、派生类本身的构造函数
18.当不同的类具有相同的间接基类时,有特点(AD)(两个答案)
A)各派生类对象将按继承路线产生自己的基类版本
B)派生类对象无法产生自己的基类版本
C)为了建立惟一的间接基类版本,在基类定义前加virtual即可
D)为了建立惟一的间接基类版本,应该声明虚继承
19.在C++中,要实现动态联编,必须使用(D)调用虚函数
A)类名B)派生类指针C)对象名D)基类指针
20.下列函数中,可以作为虚函数的是(CD)(两个答案)
A普通函数B)构造函数C)成员函数D)析构函数
21.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B)
A)不同B)相同C)相容D)部分相同
22.下面函数原型声明中,(B)声明了fun为虚函数
A)voidfun()=0;B)virtualvoidfun()=0;
C)virtualvoidfun();D)virtualvoidfun(){};
23.若一个类中含有纯虚函数,则该类称为(D)
A)基类B)纯基类C)派生类D)抽象类
24.假设A为抽象类,下列声明(B)是正确的
A)Afun(int);B)A*p;C)intfun(A);D)AObj;
25.下面描述中,正确的是(BD)(两个答案)
A)虚函数是没有实现的函数B)纯虚函数的实现在派生类中
C)抽象类是没有纯虚函数的类D)抽象类指针可以指向不同的派生类
26.关于函数模板,描述错误的是(A)
A)函数模板必须由程序员实例化为可执行的函数模板
B)函数模板的实例化由编译器实现
C)一个类定义中,只要有一个函数模板,则这个类是类模板
D)类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
27.下列的模板说明中,正确提(AD)(两个答案)
A)templatevtypenameT1,typenameT2>
B)templatevclassT1,T2>
C)templatevclassT1,classT2>
D)templatevtypenameT1;typenameT2>
28.假设有函数模板定义如下:
TemplatevtypenameT>
Max(Ta,Tb,T&c)
{c=a+b;}
下列选项正确的是(AD)(两个答案)
A)floatx,y;floatz;Max(x,y,z);
B)intx,y,z;Max(x,y,z);
C)intx,y;floatz;Max(x,y,z);
D)floatx;inty,z;Max(x,y,z);
29.关于类模板,描述错误的是(D)
A)—个普通基类不能派生类模板
B)类模板从普通类派生,也可以从类模板派生
C)根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
D)函数的类模板参数须通过构造函数实例化
30.建立类模板对象的实例化过程为(C)
A)基类d派生类B)构造函数d对象
C)模板类d对象D)模板类d模板函数
31.在C++中,容器是一种(D)
A)标准类B)标准对象C)标准函数D)标准类模板
32.下列类中(BD)(两个答案)不是输入/输出流类iostream的派生类
A)fstreamB)ofstreamC)strstreamD)ostrstream
33.在下列选项中(BCD)(三个答案)是ostream类的对象
A)cinB)cerrC)clogD)cout
函数的功能是从输入流中读取(D)
A)一个字符B)当前字符C)一行字符D)指定若干个字符
35.下列选项中,用于清除基数格式位置以十六制输出的语句是(B)
A)cout< : dec,ios: : basefield); B)cout< : hex,ios: : basefield); C)cout< : oct,ios: : basefield); D)cin>>setf(ios: : hex,ios: : basefield); 36.下列格式控制符,在中定义的是(AD)(两个答案),在中定义的是(BC) (两个答案) A)endlB)setfillC)setwD)oct 37.下列串流类,在中定义的是(BD)(两个答案),在中定义的是(AC) A)istringstreamB)istrstreamC)ostringstreamD)ostrstream 38.包含类fstream定义的头文件是(A) A)B)C)D) 39.要求打幵文件,可写入数据,正确的语句是(D) A)ifstreaminfile(“d: ios: : in); B)ifstreaminfile(“d: ios: : in); C)ofstreaminfile(“d: ”,ios: : out); D)fstreaminfile(“d: ”,ios: : in|ios: : out); 40.假定已定义浮点型变量 data,以二进制方式把data的值写入输出文件流对 象outfile中去,正确的语句是(C) A)((float*)&data,sizeof(float)); B)((float*)&data,data); C)((char*)&data,sizeof(float)); D)((char*)&data,data); 二、简答题: 1.什么是预编译,何时需要预编译: 回答: 总是使用不经常改动的大型代码体。 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。 在这种情况下,可以将所有包含文件预编译为一个预编译头。 2.C和C++有什么不同? 从机制上: c是面向过程的(但c也可以编写面向对象的程序);C++是面向对 象的,提供了类。 但是, C++编写面向对象的程序比C容易 从适用的方向: C适合要求代码体积小的,效率高的场合,如嵌入式;C++适合 更上层的,复杂的;llinux核心大部分是c写的,因为它是系统软件,效率要 求极高。 从名称上也可以看出,C++比C多了+,说明C++是C的超集;那为什么不叫C+ 而叫C++呢,是因为c+牡匕 C来说扩充的东西太多了,所以就在C后面放上两个+;于是就成了C++ C语言是结构化编程语言,C++是面向对象编程语言。 C++则重于对象而不是过程,侧重于类的设计而不是逻辑的设计。 3.C和C++中的struct有什么不同 回答: C和C++中struct的主要区别是C中的struct不可以含有成员函数,而C+冲 的struct可以。 C++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private 4.多态的实现机制。 回答: 虚函数表和动态联编。 5.纯虚函数的概念,有什么作用回答: 基类中要派生类必须只继承其接口且必须由派生类自己提供相应的实现的函数。 其作用就是建立一个公共的接口。 6.简述使用友元函数的优点和缺点。 回答: 友元函数的优点: 不需要修改类的成员函数而可以访问类的私有成员,并且提高了执行效率。 缺点: 破坏了类的封装性及信息的隐蔽性。 8.多态。 overload和override的区别。 回答: 重载在相同范围(同一个类中),函数名字相同,参数不同,virtual 键字可有可无。 覆盖是指派生类函数覆盖基类函数,不同的范围,函数名字相同,参数相同,基类函数必须有virtual关键字。 9.全局变量和局部变量有什么区别是怎么实现的操作系统和编译器是怎么知道的? 答: 一些变量整个程序中都是可见的,它们称为全局变量,一些变量在函数内部定义且只在函数中可知,则称为局部变量。 全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区三、有关内存的思考题 1.voidGetMemory(char*p) { p=(char*)malloc(100); } voidTest(void) { char*str=NULL; GetMemory(str); strcpy(str,"helloworld");printf(str); } ? 请问运行Test函数会有什么样的结果回答: 程序崩溃。 因为GetMemory并不能传递动态内存, Test函数中的str一直都是NULL。 strcpy(str,"helloworld");将使程序崩溃。 2.char*GetMemory(void) { charp[]="helloworld"; returnp; } voidTest(void) { char*str=NULL; str=GetMemory(); printf(str); ? 请问运行Test函数会有什么样的结果? 回答: 可能是乱码。 NULL, 因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是但其原现的内容已经被清除,新内容不可知。 3.voidGetMemory2(char**p,intnum) { *p=(char*)malloc(num); } voidTest(void) { char*str=NULL; GetMemory(&str,100); strcpy(str,"hello"); printf(str); } 请问运行Test函数会有什么样的结果? 回答: (1)能够输出hello (2)内存泄漏 ? 3.voidTest(void) { char*str=(char*)malloc(100);strcpy(str,“hello”); free(str); if(str! =NULL) printf(str); } } 请问运行Test函数会有什么样的结果? 回答: 篡改动态内存区的内容,后果难以预料,非常危险。 因为free(str);之后,str成为野指针, if(str! =NULL)语句不起作用。 四编程题: 1.用C++写个程序,如何判断一个操作系统是16位还是32位的不能用sizeof()函数 回答: A1: 16位的系统下, inti=65536; cout< classString { public: String(constchar*str=NULL);//通用构造函数 String(constString&another);//拷贝构造函数 ~String();//析构函数 String&operater=(constString&rhs);//赋值函数 private: char*m_data;//用于保存字符串 }; 尝试写出类的成员函数实现。 回答: String: : String(constchar*str) { if(str==NULL)//strlen在参数为NULL时会抛异常才会有这步判断 { m_data=newchar[1]; m_data[0]='\0'; } else m_data=newchar[strlen(str)+1]; } String: : String(constString&another) { m_data=newchar[strlen+1]; strcpy(m_data,; } String&String: : operator=(constString&rhs) { if(this==&rhs) return*this; delete[]m_data;//删除原来的数据,新开一块内存m_data=newchar[strlen+1]; strcpy(m_data,; return*this; } String: : ~String() { delete[]m_data;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试题 答案