




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一部分 选择题1、下列语句错误的是(D)。A.int *p=new int(10); B.int *p=new int10;C.int *p=new int; D.int *p=new int40(0);2、假设已经有定义“const char *const name=chen;”下面的语句中正确的是(D)。A.name3=a; B.name=lin;C.name=new char5; D.coutname3;3、假设已经有定义“char *const name=chen;”下面的语句中正确的是(A)。A.name3=q; B.name=lin;C.name=new char5; D. name=new char(q);4、假设已经有定义“const char *name=chen;”下面的语句中错误的是(A)。A.name3=q; B.name=lin;C.name=new char5; D. name=new char(q);5、重载函数在调用时选择的依据中,(B)是错误的。A.函数名字 B.函数的返回类型C.参数个数 D.参数的类型6、在(A)情况下适宜采用内联函数。A.函数代码小,频繁调用 B.函数代码多,频繁调用C函数体含有递归语句 D.函数体含有循环语句7、下列描述中,(C)是错误的。A.内联函数主要解决程序的运行效率问题B.内联函数的定义必须出现在内联函数第一次被调用之前C.内联函数中可以包括各种语句D.对内联函数不可以进行异常接口声明8、在C+中,关于下列设置默认参数值的描述中,(B)是正确的。A.不允许设置默认参数值B.在指定了默认值的参数右边,不能出现没有指定默认值的参数C.只能在函数的定义性声明中指定参数的默认值D.设置默认值时,必须全部都设置9、下面的声明中正确的是(D)。A.int & a4; B。int & *p;C.int & q D。int i,*p=& i;10、下面有关重载的说法中正确的是(C)。A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须有不同的形参列表D.重载函数名可以不同11、关于new运算符的下列描述中,(D)是错误的。A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C.使用它创建对象时要调用构造函数D.使用它创建对象数组时必须指定初始值12、关于delete运算符的下列描述中,(C)是错误的。A.它必须用于new返回的指针 B.使用它删除对象时要调用析构函数C.对一个指针可以使用多次该运算符 D.指针名前只有一对方括号符号,不管所删除数组的维数13、面向对象程序设计思想的主要特征中不包括(B)A.继承性 B.功能分解,逐步求精C.封装性和信息隐藏 D.多态性14、关于类和对象的描述错误的是(C)A.对象是现实世界中的客观事物,对象具有确定的属性B.类是具有相同属性和行为的一组对象的集合C.对象是类的抽象,类是对象的实例D.类是对象的抽象,对象是类的实例15、下面关于对象概念的描述错误的是(A)A.任何对象都必须有继承性 B.对象是属性和方法的封装体C.对象间的通讯靠消息传递 D.操作是对象的动态属性16、下面有关构造函数的描述中,错误的是(D)A.构造函数可以设置默认参数 B.构造函数在定义类对象时自动执行C.构造函数没有返回类型 D.构造函数不可以重载17、下面描述中,表达错误的是(A) A) 公有继承时基类中的public成员在派生类中仍是public的 B) 公有继承时基类中的private成员在派生类中仍是private的 C) 公有继承时基类中的protected成员在派生类中仍是protected的 D) 私有继承时基类中的public成员在派生类中是private的18、在下面有关构造函数的描述中,正确的是(B)。A.构造函数可以带有返回值B.构造函数的名字与类名完全相同C.构造函数必须带有参数D.构造函数必须定义,不能默认19、再声明类时,下面的说法正确的是(C)。A. 可以在类的声明中给数据成员赋初值B. 数据成员的数据类型可以是registerC. private,public,protected 可以按任意顺序出现D. 没有用private,public,protected定义的数据成员是共有成员20、 在下面有关析构函数特征的描述中,正确的是(C)。A. 一个类中可以定义多个析构函数B. 析构函数名与类名完全相同C. 析构函数不能指定返回类型D. 析构函数可以有一个或多个参数21、构造函数是在(B)时被执行的。A. 程序编译B. 创建对象C. 创建类D. 程序装入内存22、在下面有关静态成员函数的描述中,正确的是(B)。A. 在静态成员函数中可以使用this指针B. 在建立对象前,就可以为静态数据成员赋值C. 静态成员函数在类外定义时,要用static前缀D. 静态成员函数只能在类外定义23、在下面有关友元函数的描述中,正确的说法是(A)。A. 友元函数是独立于当前类的外部函数B. 一个友元函数不能同时定义为两个类的友元函数C. 友元函数必须在类的外部定义D. 在外部定义友元函数时,必须加关键字friend24、友元的作用之一是(A)。A. 提高程序的运行效率B. 加强类的封装性C. 实现数据的隐藏性D. 增加成员函数的种类25、下列声明中,正确的纯虚函数声明是(A)A.virtual void vf()=0;B.void vf(int)=0;C.virtual int vf(int); D.virtual void vf(int)26、下列不能表示以输出(写)方式打开文件的是(B)A.ofstream ofile(“file.txt”);B.fstream ofile;ofile.open(“file.txt”);C.ofstream ofile;ofile.open(“file.txt”);D.fstream ofile;ofile.open(“file.txt”,ios:out);27、下列模板声明的开始部分,其中正确的是(C)A.template B.templateC.template D.template28、关于关键字class和typename,下列表述正确的是(A)A.程序中所有的typename都可以替换为classB.程序中所有的class都可以替换为typenameC.A和B都正确D.A和B都不正确29、下列说法中正确的是(C)A.当异常产生时,可中断程序从头开始B.当异常产生时,必须恢复、继续运行程序C.具体程序处理异常的方法可不同D.在程序中嵌入错误处理语句就可以防止程序异常的出现30、使用派生类的主要原因是(A)。A 提高代码的可重用性B 提高程序的运行效率C 加强类的封装性D 实现数据隐藏31、假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义derived的正确写法是(C)。A class derived:student private;B class derived:student public;C class derived: private student ;D class derived: public student ;32、在多继承构造函数定义中,几个基类构造函数用(C)分隔。A. : B. ; C. , D. :33、设置虚基类的目地是(B)。A 简化程序B 消除二义性C 提高运行效率D 减少目标代码34、关于面向对象的程序设计方法,下列说法正确的是(D)A.“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理B.“多态性”指的是对象的状态会根据运行时的要求自动变化C.基类的私有成员在派生类的对象中不可访问,也不占内存空间D.在面向对象的程序设计中,结构化程序设计方法仍有着重要作用35、下列关于类和对象的叙述中,错误的是(A)A.一个类只能有一个对象 B.对象是类的具体实例 C.类是对某一类对象的抽象 D.类和对象的关系是一种数据类型与变量的关系36、下面关于对象概念的描述中,错误的是(A)A.C中的对象就是C语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的消息传递是通过消息进行的37、下列关于类中成员函数特征的描述中错误的是(A)A.类的所有成员函数的声明和定义都必须在类体内给出B.类的成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的38、下列说法中错误的是(C)A.公有继承时基类中的public成员在派生类中仍是public成员B.私有继承时基类中的protected成员在派生类中是private成员C.私有继承时基类中的public成员在派生类中是protected成员D.保护继承时基类中的public成员在派生类中是protected成员39、有关运算符重载正确的描述是(D)。A C+语言允许在重载运算符时改变运算符的操作个数B C+语言允许在重载运算符时改变运算符的优先级C C+语言允许在重载运算符时改变运算符的结合性D C+语言允许在重载运算符时改变运算符原来的功能40、能用友元函数重载的运算符是(A)。A.+B.=C.D.-41、关于虚函数,正确的描述是(A)。A.构造函数不能是虚函数B.析构函数不能是虚函数C.虚函数可以是虚函数D.虚函可以是静态成员函数42、派生类中虚函数原型的(D)。A.函数类型可以与基本类型中虚函数的原形不同B.参数个数可以与基类中虚函数的原形不同C.参数类型可以与基类中虚函数的原形不同D.以上都不对43、如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是(C)。A.virtual show()=0;B.virtual void show();C.virtual void show()=0;D.void show()=0 virtual;44、下列关于纯虚函数与抽象类的描述中,错误的是(C)。A.纯虚函数是一种特殊的函数,它允许没有具体的实现B抽象类是指具有纯虚函数的类C.一个基类的说明中草药有纯虚函数,该基类的派生类一定不再是抽象类D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出45、一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本,此虚函数又称为(C)A.虚析构函数 B.虚构造函数C.纯虚函数 D.静态成员函数46、下列打开文件的表达式中错误的是(D)A.ofstream ofile;ofile.open(“C:vcabc.txt”,ios:binary);B.fstream iofile;iofile.open(“abc.txt”,ios:ate);C.ifstream ifile(“C:vcabc.txt”);D.cout.open(“C:vcabc.txt”,ios:binary);47、下面的函数模板定义中错误的是(A)A.template B.templateQ F(Q x)return Q+x; Q F(Q x)return x+x;C.template D.templateT F(T x)return x*x; bool F(T x)return x1;48、关于友元,下列说法错误的是(A)A.如果类A是类B的友元,那么类B也是类A的友元B.如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员C.友元关系不能被继承D.如果类A是类B的友元,那么类A的所有成员函数都是类B的友元函数49、下列try、catch语句块说法不正确的是(B)A.try语句块出现之前不允许出现catch语句块B.catch语句块只能跟在try语句块之后,它们之间可以有其它语句C.try语句块之后可以紧跟多个catch语句块D.catch必须有参数50、假设声明一下的函数模板:templateT max(T x,T y) return(xy)?x:y;并定义int i;char c;错误的调用语句是(D)。A.max(i,i) B.max(c,c) C.max(int)c,i) D.max(i,c);51、模板的作用是为了(A)。A. 提高代码的可重用性 B. 提高代码的运行效率C. 加强类的封装性 D. 实现多态性52、C+处理异常的机制是由(B)3部分组成。A.编辑、编译和运行 B. 检查、抛出和捕获C.编辑、编译和捕获 D. 检查、抛出和运行第二部分 读程序写结果1、写出运行结果#include class Base public: virtual void show() coutI am Bases object!n; ;class Derived :public Basepublic: void show() coutshow(); bPtr= &dObj; bPtr-show(); return 0; 2、写出运行结果#include #include class student char name10; int score; public: student(char na,int d) strcpy(name,na); score=d; char *getname() return name; friend int compare(student &s1,student &s2) if(s1.scores2.score) return 1; else if(s1.score=s2.score) return 0; else return -1; ; void main() student st=student(王华,78),student(李明,92),student(张伟,62),student(孙强,88); int i,min=0,max=0; for(i=1;i4;i+) if(compare(stmax,sti)=-1) max=i; else if(compare(sti,stmin)=-1) min=i; cout 最高分:stmax.getname()endl; cout 最低分:stmin.getname()endl; 3、写出运行结果#include #include class student char name10; int score; char level7; public: student(char na,int d) strcpy(name,na); score=d; char *getname() return name; friend void trans(student &s) if(s.score=90) strcpy(s.level,优); else if(s.score=80) strcpy(s.level,良); else if(s.score=70) strcpy(s.level,中); else if(s.score=60) strcpy(s.level,及格); else strcpy(s.level,不及格); void disp() coutname score levelendl; ; void main() student st=student(王华,78),student(李明,92),student(张伟,62),student(孙强,88); cout姓名 成绩 等级endl; for(int i=0;i4;i+) trans(sti); sti.disp(); 4、写出运行结果#includeclass first int a; public:first() a=5; /无参构造函数first(int i) a=i; /重载构造函数int getA() return a;class second int b; public:second(int i) b=i; /有参构造函数int getB() return b; ;class third : public first, public second int c;first f1; /成员对象second s1; /成员对象 public:/派生类构造函数 :初始化表third(int x, int y, int k) :f1(x),s1(y),first(x),second(k) c=x; void print() cout a=getA()endl;cout b=getB()endl;cout c=cendl;cout f1.a=f1.getA()endl;cout s1.b=s1.getB()endl;void main() third t1(3, 5, 7); /定义派生类的对象 d,并初始化t1.print();5、写出运行结果#include class base int n; public: base(int a) coutconstructing base endl; n=a; coutn=nendl; base()coutdestructing base endl; ; class subs:public base base bobj; int m; public: subs(int a,int b,int c):base(a),bobj(c) coutconstructing sub endl; m=b; coutm=mendl; subs()coutdestructing sub endl; ; void main() subs s(7,8,9); 6、写出运行结果#include using namespace std;class Point/Point类定义public:/外部接口Point(int xx=0, int yy=0)/构造函数X=xx;Y=yy;countP+;coutconstructing:(X,Y)endl;Point(Point &p);/拷贝构造函数Point() countP-; coutdestructing:(X,Y)endl;int GetX() return X;int GetY() return Y;static void GetC() coutcountPendl;/静态函数成员private:/私有数据成员int X,Y;static int countP;/静态数据成员引用性说明;Point:Point(Point &p)X=p.X;Y=p.Y;countP+;coutcopy constructing:(X,Y)endl;int Point:countP=0;/静态数据成员定义性说明/初始化,使用类名限定void main()Point:GetC ();Point A(4,5);/定义对象AA.GetC();/输出对象号,对象名引用Point B(A);/定义对象BPoint:GetC();/输出对象号,类名引用A.GetC();Point *C=new Point3;Point:GetC();delete C;Point:GetC();Point D(1,2);D.GetC();Point:GetC ();7、写出运行结果#include class ExceptionClasspublic: ExceptionClass(int a) value=a; int GetValue()return value;private: int value;void TestException(int value) try if (value 0) coutthrowing!endl; throw ExceptionClass(value); coutvalue =valueendl; catch(ExceptionClass &r) coutcatching!endl; coutinput value is r.GetValue()endl; int main() TestException(-1); TestException(2); return 0;8、写出运行结果#include #include class MyException public: MyException(char *str) msg = str; char * show() return msg; private: char *msg;double division(int dividend, int divisor) if (divisor = 0) throw MyException(error!); return (double)dividend/divisor; main() int a, b; double result; try result = division(10,2); coutresultendl; catch (MyException e) coute.show()endl; try result = division(10,0); coutresultendl; catch (MyException e) coute.show()endl; return 0;9、写出运行结果#include main() ofstream outFile (outFile.txt, ios:out); if (!outFile ) cerrOpen file or create file error.endl; else outFile 2string 3.2; outFile .close(); ifstream inFile (outFile.txt, ios:in); int a; float c; if (!inFile) cerrFile open error.a; inFile.seekg(7,ios:cur); inFilec; coutaendlcendl; inFile.close(); return 0;第三部分 编程题1、定义一个三角形类Ctriangle,求三角形面积和周长。要求给出main函数进行测试。#include #include class Ctrianglepublic:Ctriangle(double x,double y,double z)a=x;b=y;c=z;double GetPerimeter()return a+b+c;double GetArea() double p=GetPerimeter()/2;return sqrt(p*(p-a)*(p-b)*(p-c);void display()coutCtriangle:a=a b=b c=cendl;coutPerimeter:GetPerimeter()endl;coutArea:GetArea()endl;private:double a,b,c;void main()Ctriangle T(3,4,5);T.display();2、设计一个直角三角形类(RightTriangle),其数据成员a和b分别表示直角三角形两个直角边边长,构造函数接收直角三角形边长用来初始化数据成员a和b,另有计算直角三角形周长Circumference及计算直角三角形面积area两个成员函数。在main函数中创建两个不同大小的直角三角形对象,计算并输出两个直角三角形面积的差、周长的和。#include #include class RightTriangledouble a,b;public:RightTriangle(double x, double y)a=x; b=y; double area()return a*b/2;double Circumference()return a+b+sqrt(a*a+b*b); ;void main()RightTriangle r1(5,10),r2(6,8);cout三角形面积差为:r1.area()-r2.area()endl;cout三角形周长和为:r1.Circumference()+r2.Circumference()endl;3、定义一个Shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积。要求给出main函数进行测试。#include class Shapepublic:Shape()Shape()virtual double GetArea()=0;virtual double GetPerimeter()=0;class Rectangle:public Shapepublic:Rectangle(double L,double W)length=L;width=W; Rectangle();double GetArea() return length*width;double GetPerimeter()return 2*length+2*width;private:double length;double width;class Circle :public Shapepublic:Circle(double r)radius=r;Circle()double GetArea()return 3.14*radius*radius;double GetPerimeter()return 2*3.14*radius;private:double radius;void main()Shape *s;s=new Rectangle(10,20);coutThe area of the Rectangle is GetArea()endl;coutthe Perimeter of the Rectangle is GetPerimeter()endl;delete s;s=new Circle(10);coutThe area of the Circle is GetArea()endl;coutthe Perimeter of the Circle is GetPerimeter()endl; delete s;4、给定基类:class Basepublic:virtual void Iam()coutBaseendl;(1)请从Base类派生两个新类,每个类定义Iam()来打印自己类的名字.(2)创建出这些类的对象,分别调用Iam().(3)将这些类的对象的地址传递给Base*作参数的函数,通过该指针来调用Iam()(4)将这些类的对象的地址传递给Base的引用作参数的函数,通过该引用来调用Iam()(1)创建新类class NewClass1:public Basepublic:void Iam()coutNewClass1endl;class NewClass2:public Basepublic:void Iam()coutNewClass2Iam(); f(&a);f(&b);f(&c);(4)void f(Base& br)br.Iam();f(a);f(b);f(c);5、重载运算符重载和,使用户能直接输入和输出复数。#include class complexfloat real,imag;public:complex(float r=0,float i=0) real =r;imag=i; friend ostream& operator(istream &,complex &);ostream& operator(ostream &output,complex &obj)output0) output+;if (obj.imag!=0) outputobj.imag(istream &input,complex &obj)coutobj.real;inputobj.imag;return input;void main()complex c1(2.3,4.6),c2(3.6,2.8),c3;coutthe value of c1 is:c1endl;coutthe value of c2 is:c2c3;coutthe value of c3 is:c3endl;6、设计一个矩形类(Rectangle),其数据成员length和width分别表示矩形的长和宽,构造函数接收矩形的长和宽用来初始化数据成员length和width,另有计算矩形周长Circumference及计算矩形面积area两个成员函数。在main函数中创建两个不同大小的矩形对象,计算并输出两个矩形面积的和、周长的差。#include class Rectangledouble length,width;public:Rectangle(double x, double y)length=x; width=y; double area()return length*width;double Circumference()return 2*(length+width); ;void main()Rectangle r1(7,10),r2(6,8);cout矩形面积和为:r1.area()+r2.area()endl;cout矩形周长差为:r1.Circumference()-r2.Circumference()endl;7、设计一个person类,其属性包括name和id,其中name属性为指针,分别利用person类构造函数和拷贝构造函数建立对象,打印每个person类对象的信息。要求分别编写浅拷贝构造函数和深拷贝构造函数调试程序。#include#includeclass Person public: Person(char *pname=noname,int pid=100) coutcall constructorendl; name=new charstrlen(pname)+1; if(name!=0) strcpy(name,pname); id=pid; Person(Person &p) coutcall copy constructorendl; name=; id=p.id; void printinfo() coutname,idendl; Person()delete name; private: char *name; int id; void main() Person wang(wang,101); wang.printinfo(); Person li(wang); li.printinfo();(深拷贝情况)#include#includeclass Person public: Person(char *pname=noname,int pid=100) coutcall constructorendl; name=new charstrlen(pname)+1; if(name!=0) strcpy(name,pname); id=pid; Person(Person &p) coutcall copy constructorendl; name=new ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年的国际贸易合同编写指南
- 会议订餐服务合同样本
- ppp模式合同样本
- 物业管理合同
- 二零二五分期付款装修协议书
- 代理拿货付款合同样本
- 二零二五茶叶代理授权书
- 物业管理费协议书
- 纯劳务分包合同模板二零二五年
- 二手房商铺买卖合同二零二五年
- 《自动控制原理》期末复习试题及答案17
- 输变电工程施工质量验收统一表式(电缆工程电气专业)
- 山东省2024年夏季普通高中学业水平合格考试地理试题02(解析版)
- 2024版北京市家庭居室装饰装修工程施工合同
- 2024年全国职业院校技能大赛高职组(智能节水系统设计与安装赛项)考试题库-下(多选、判断题)
- 山东省人工智能融合创新职业技能竞赛(人工智能训练师)试题及答案
- 2024年山东省青岛市中考语文试卷(含答案解析)
- 抗凝剂皮下注射技术临床实践指南与临床应用
- 2022新教材苏教版科学5五年级下册全册教学设计
- 小儿阑尾炎概要
- 13J933-2体育场地与设施(二)
评论
0/150
提交评论