C++历年考试真题.doc_第1页
C++历年考试真题.doc_第2页
C++历年考试真题.doc_第3页
C++历年考试真题.doc_第4页
C++历年考试真题.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四川大学期末考试试题(A卷)(2006-2007学年第2学期)一、单项选择题(本大题共10小题,每小题2分,共20分)1说明虚函数的关键字是( )。A. inlineB. virtualC. defineD. static2在每个C+程序中都必须包含有这样一个函数,该函数的函数名为( )。A. main B. MAIN C. name D. function3cout是某个类的标准对象的引用,该类是( )。A. ostreamB. istreamC. stdoutD. stdin4如果在类外有函数调用CPoint:func();则函数func()是类CPoint的( )。A. 私有静态成员函数B. 公有非静态成员函数C. 公有静态成员函数B. 友元函数5. 如果class类中的所有成员在定义时都没有使用关键字public、private或protected,则所有成员缺省定义为( )。A. public B. protected C. private Dstatic 6一个类的所有对象共享的是( )。A. 私有数据成员B. 公有数据成员C. 保护数据成员D. 静态数据成员7动态联编所支持的多态性称为( )。A. 虚函数B. 继承C. 编译时多态性D. 运行时多态性8定义类模板时要使用关键字( )。A. constB. newC. deleteD. template9对虚基类的定义( )。A. 不需要使用虚函数B. 必须使用虚函数C. 必须使用privateD. 必须使用public10类型转换函数( )。A. 不能带有参数B. 只能带一个参数C. 只能带2个参数D. 只能带3个参数二、判断正误题(本大题共6小题,每小题2分,共12分)1虚函数在基类和派生类之间定义,且要求函数原型完全一致。( )2抽象类可以用来直接创建对象。( )3内联函数中可以出现递归语句。( )4模板类与类模板的意义完全相同。( )5常对象只能调用常成员函数。( )6重载函数要求函数有相同的函数名,但具有不同的参数序列。( )三、填空题(本大题共6小题,每小题2分,共12分)1在用C+进行程序设计时,最好用( )代替malloc。2函数模板中紧随template之后尖括号内的类型参数都要寇以保留字( )。3编译时多态性可以用( )函数实现。4拷贝构造函数用它所在类的( )作为参数。5用关键字static修饰的类的成员称为( )成员。6重载运算符“+”的函数名为( )。四、程序分析题(本大题共4小题,每小题5分,共20分)1阅读下面程序,写出输出结果。#include using namespace std;class CArraypublic:CArray(int iArray, int iSize):m_pArray(iArray), m_iSize(iSize)int GetSize()return m_iSize;int &operator(int iIndex)return m_pArrayiIndex - 1;private:int *m_pArray;/ 指向一个数组空间int m_iSize;/ 数组元素个数;int main(void)int s=3, 7, 2, 1, 5;CArray oArray(s, 5);oArray1 = 9;for (int i = 1; i = 5; i+)cout oArrayi ;cout endl;return 0;上面程序的输出结果为:2阅读下面程序,写出输出结果。#include using namespace std;template void Print(Type a, int n)for (int i = 0; i n; i+)cout ai ;int main(void)int a = 5, 6, 8;double b = 6.8, 9.6;Print(a, sizeof(a) / sizeof(int);Print(b, 2);cout endl;return 0;上面程序的输出结果为:3阅读下面程序,写出输出结果。#include using namespace std;class CTestpublic:CTest(int iVar):m_iVar(iVar)m_iCount+;CTest()void Print() const;static int GetCount()return m_iCount;private:int m_iVar;static int m_iCount;int CTest:m_iCount = 0;void CTest:Print() constcout m_iVar m_iCount ;int main(void)CTest oTest1(6);oTest1.Print();CTest oTest2(8);oTest2.Print();cout CTest:GetCount();cout endl;return 0;上面程序的输出结果为:4阅读下面程序,写出输出结果。#include using namespace std;class CTestpublic:CTest(int iX = 0, int iY = 0, int iZ = 0):m_iZ(iZ)m_iX = iX;m_iY = iY;void Print()cout m_iX endl;cout m_iY endl;void Print() constcout m_iZ endl;private:int m_iX, m_iY;const int m_iZ;int main(void)CTest oTest1;oTest1.Print();CTest oTest2(1, 6, 8);oTest2.Print();const CTest oTest3(6, 0, 18);oTest3.Print();cout endl;return 0;上面程序的输出结果为:五、程序改错题(本大题共4小题,每小题5分,共20分)1下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2/3class CTest/4/5public:/6CTest(int iVar = 0):m_iArr(iVar)/7/8cout 构造函数: m_iArr endl;/9/10void CTest()/12/13cout 析造函数: m_iArr endl;/14/15/16private:/17int m_iArr;/18;/19int main(void)/22/23CTest oTest1, oTest2(8);/24cout endl;/25/26return 0;/27/282下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2/3class CTest/4/5public:/6CTest(int iA = 0, int iB):m_iA(iA), m_iB(iB)/7/8/9void Show()/11/12cout m_iA , m_iB endl;/13/14private:/16int m_iA, m_iB;/17;/18int main(void)/21/22CTest oTest(12, 16);/23oTest.Show();/24cout endl;/25/26return 0;/27/283下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2/3class CTest/4/5public:/6CTest(int iVar = 0)/7/8m_iVar = iVar/9/10void Print() const/12/13cout m_iVar endl;/14/15/16private:/17const int m_iVar;/18;/19int main(void)/22/23const CTest oTest(16);/24oTest.Print();/25cout endl;/26/27return 0;/28/294下面程序中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2/3class CBase/4/5public:/6CBase(int iBase = 0):m_iBase(iBase)/7/8/10/11virtual void Show() = 0;/12/13int Get() const/14/15return m_iBase;/16/17/18private:/19int m_iBase;/20;/21/22class CDerive:public CBase/23/24public:/25CDerive(int iBase = 0, int iDerive = 0):CBase(iBase)/26/27m_iDerive = iDerive;/28/29/30void Show()/31/32cout CBase:Get() , m_iDerive endl;/33/34/35private:/36int m_iDerive;/37;/38/39int main(void)/40/41CBase obj(10);/42obj.Show();/43return 0;/44/45六、编程题(本大题16分)定义一个抽象类CShape,它有一个纯虚函数Length();派生出四边型类CSquare和圆类CCircle,在派生类中重新定义函数Length(),用于求图形的周长。在类CShape中增加静态累加器m_sCount,在类CShape的构造函数中对m_sCount进行累加,在类CShape中增加静态成员函数ShowNum()用于显示对象个数,在派生类中增加拷贝构造函数和重载赋值运算符,编写测试程序进行测试。06-07 A 答案一、1B 2A3A4C5. C 6D7D8D9A10A二、123456三、1New 2class或typename3重载4对象5静态6operator+四、19 7 2 1 525 6 8 6.8 9.636 1 8 2 24001618五、1出错行:第12行原因:析造函数不能有返回值类型改正:去掉void2出错行:第7行原因:带缺省值的参数应放在参数表的尾部,其后不允许出现不带缺省值的参数改正:CTest(int iA = 0, int iB = 0):m_iA(iA), m_iB(iB)或 CTest(int iA , int iB = 0):m_iA(iA), m_iB(iB)或CTest(int iA , int iB):m_iA(iA), m_iB(iB)/73出错行:第9行原因:常数据成员只能通过初始化表方式进行初始化。改正:去掉第9行,在第7行后加初始化表,即第9行改为:CTest(int iVar = 0):m_iVar(iVar)/74出错行:第42行原因:抽象类不能用来直接创建对象。改正:将第42行改为: CDerive obj(10);四川大学期末考试试题(B卷)(2006-2007学年第2学期)一、单项选择题(本大题共10小题,每小题2分,共20分)1说明内联函数的关键字是( )。A. inlineB. virtualC. defineD. static2假定CAb为一个类,则执行CAb oX;语句时将自动调用该类的( ) A. 有参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 3cin是某个类的标准对象的引用,该类是( )。A. ostreamB. istreamC. stdoutD. stdin4下面的哪个保留字不能作为函数的返回类型?( )A. void B. int C. new D. long5不能参与重载的运算符是( )。A. 类 B. 函数 C. 函数模板 D. 运算符6由于数据隐藏的需要,静态数据成员通常被说明为( )。A. 私有的 B. 公有的 C. 保护的 D. 不可访问的7编译时多态性使用什么获得?( )A. 重载函数 B. 继承 C. 虚函数 D. B和C 8拷贝构造函数的参数通常是( )。A. 无特殊要求B. 指向对象的指针C. 自已类对象的常引用D. 对象9C+有几种联编?( )A. 1种B. 2种C. 3种D. 4种10基类和派生类可以分别称为( )。A. “大类”和“小类”B. “父类”和“子类”C. “小类”和“大类”D. “子类”和“父类”二、判断正误题(本大题共6小题,每小题2分,共12分)1不可以定义抽象类的对象。( )2内联函数的定义必须出现在第一次调用内联函数之前。( )3模板函数与函数模板的意义完全相同。( )4只有常成员函数才可以操作常对象。( )5引用可以不初始化。( )6使用new运算符创建数组时,可以为该数组指定初始值。( )三、填空题(本大题共6小题,每小题2分,共12分)1设函数max是由函数模板实现的,并且max(3.5, 5)和max(3, 5)都是正确的函数调用,则此函数模板具有( )个类型参数。2在C+中,函数重载与虚函数帮助实现了类的( )性。3由static修饰的数据成员为该类的所有对象( )。4重载函数在参数类型或参数个数上不同,但( )相同。5使用new建立的动态对象在不用时必须用( )释放所占用的空间。6重载运算符“”的函数名为( )。四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。1阅读下面程序,写出输出结果。#include using namespace std;class CPositionpublic:CPosition(int iPositionX = 0, int iPositionY = 0):m_iPositionX(iPositionX)m_iPositionY = iPositionY;int GetPositionX() constreturn m_iPositionX;int GetPositionY() constreturn m_iPositionY;void SetPositionX(int iPositionX)m_iPositionX = iPositionX;void SetPositionY(int iPositionY)m_iPositionY = iPositionY;private:int m_iPositionX;/ X坐标int m_iPositionY;/ X坐标;int main(void)CPosition oPostion1;const CPosition oPostion2(6, 8);cout oPostion1.GetPositionX() endl;oPostion1.SetPositionX(16);cout oPostion1.GetPositionX() endl;oPostion1.SetPositionY(18);cout oPostion1.GetPositionY() endl;cout oPostion2.GetPositionX() endl;cout oPostion2.GetPositionY() endl;return 0;上面程序的输出结果为:2阅读下面程序,写出输出结果。#include using namespace std;template class CTestpublic:CTest(Type m_tArray, int iSize):m_pArray(m_tArray)m_iSize = iSize;void Print() constfor (int i = 0; i m_iSize; i+)cout m_pArrayi ;private:Type *m_pArray;int m_iSize;int main(void)int a = 1, 0, 8;double b = 1.6, 1.8;CTest oTest1(a, 3);oTest1.Print();CTest oTest2(b, sizeof(b) / sizeof(double);oTest2.Print();cout endl;return 0;上面程序的输出结果为:3阅读下面程序,写出输出结果。#include using namespace std;class CGoodspublic:CGoods(int iWeight)m_iWeight = iWeight;m_iTotalWeight = m_iTotalWeight + iWeight;CGoods(const CGoods &oGood)m_iWeight = oGood.m_iWeight;m_iTotalWeight = m_iTotalWeight + m_iWeight;CGoods()m_iTotalWeight = m_iTotalWeight - m_iWeight;void Print() const;static int GetTotalWeight()return m_iTotalWeight;private:int m_iWeight;static int m_iTotalWeight;int CGoods:m_iTotalWeight = 8;/ 初始化静态数据成员void CGoods:Print() constcout m_iWeight m_iTotalWeight ;int main(void)CGoods oGood1(6);oGood1.Print();CGoods oGood2(oGood1);oGood2.Print();cout CGoods:GetTotalWeight();cout endl;return 0;上面程序的输出结果为:4阅读下面程序,写出输出结果。#include using namespace std;template class CTestpublic:CTest(Type tA = 0, Type tB = 0, Type tC = 0):m_tC(tC)m_tA = tA;m_tB = tB;void Print()cout m_tA endl;cout m_tB endl;void Print() constcout m_tC endl;private:Type m_tA, m_tB;const Type m_tC;int main(void)CTest oTest1;oTest1.Print();CTest oTest2(1, 9, 6);oTest2.Print();const CTest oTest3(0, 6, 1.8);oTest3.Print();cout endl;return 0;上面程序的输出结果为:五、程序改错题(本大题共4小题,每小题5分,共20分)1下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2/3class CArray/4/5public:/6void CArray(int iArray, int iSize):m_pArray(iArray), m_iSize(iSize)/7/8/9/10int GetSize()/11/12return m_iSize;/13/14/16int &operator(int iIndex)/17/18return m_pArrayiIndex - 1;/19/20/21private:/22int *m_pArray;/ 指向一个数组空间/23int m_iSize;/ 数组元素个数/24;/25int main(void)/28/29int s=3, 7, 2, 1, 5;/30CArray oArray(s, 5);/31oArray1 = 9;/32for (int i = 1; i = 5; i+)/33/34cout oArrayi ;/35/36cout endl;/37return 0;/39/402下面程序中有错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2class CTest/4/5public:/6CTest(int iA = 0, int iB = 0):m_iA(iA), m_iB(iB)/7/8/9void Print()/11/12cout m_iA , m_iB endl;/13/14private:/16int m_iA, m_iB;/17;/18int main(void)/21/22const CTest oTest(12, 16);/23oTest.Print();/24cout endl;/25return 0;/27/283下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2class CInteger/4/5public:/6CInteger(int iNum=0)/7/8m_iNum = iNum;/9/10int operator int()/12/13return m_iNum;/14/15void Print() const/17/18cout m_iNum endl;/19/20private:/22int m_iNum;/23;/24int main(void)/26/27CInteger oCInteger(168);/28int iNum;/29iNum = oCInteger;/30cout iNum endl;/31return 0;/33/344下面程序中有一处错误,请指出出错的行,说明错误原因,并加以改正。#include /1using namespace std;/2class CBase/4/5public:/6CBase(int iBase = 0):m_iBase(iBase)/7/8/10virtual void Show() const = 0;/12int Get() const/14/15return m_iBase;/16/17private:/19int m_iBase;/20;/21class CDerive:public CBase/23/24public:/25CDerive(int iBase = 0, int iDerive = 0):CBase(iBase)/26/27m_iDerive = iDerive;/28/29void Show() const/31/32cout CBase:Get() , m_iDerive endl;/33/34private:/36int m_iDerive;/37;/38void Print(const CBase obj)/40/41obj.Show();/42/43int main(void)/45/46CDerive obj(10);/47Print(obj);/48return 0;/49/50六、编程题(本大题16分)定义并实现一个抽象基类CPerson(人类),在此基础上,定义一级派生类,CStudent(学生类)和CCadre(干部类),然后定义二级派生类CStudentCadre(学生干部类),要求二级派生是一个多继承类,在类Cperson中增加静态累加器m_sCount,在类CPerson的构造函数中对m_sCount进行累加,在类CPerson中增加静态成员函数ShowNum()用于显示总人数(也就是对象个数),在派生类中增加拷贝构造函数和重载赋值运算符,并注意动态内存的管理问题,编写测试程序进行测试。06-07 B 答案一、1A 2B 3B 4C5A 6A 7A8C9B10B二、1 2. 3 4 5 6三、1.2 2多态 3共享 4函数名 5Delete 6operator四、101618682参考答案:1 0 8 1.6 1.83参考答案:6 14 6 20 204参考答案:00191.8五、1出错行:第7行原因:构造函数不能有返回值类型改正:去掉void2出错行:第11、23行 原因:常对象只能调用常成员函数改正: 将第11行改为: void Print() const或将第23行改为: CTest oTest(12, 16);3出错行:第12行 原因:类型转换函数没有返回值类型改正:去掉返回值类型int4.出错行:第40行原因:抽象类不能用来直接作函数参数,但可使用抽象类的引用作参数。改正:将第40行改为: void Print(const CBase &obj)四川大学期末考试试题(A卷)(2008-2009学年第2学期)一、单项选择题(本大题共10小题,每小题2分,共20分)1下面有关重载函数的描述中,正确的是( )。A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同C)重载函数必须具有不同的形参表D)重载函数名可以不同2假定MyCIass为一个类,那么下列的函数说明中,( )为该类的析构函数。A)voidMyClass();B)MyClass(int n);C)MyClass( );D)MyClass( );3( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论