收藏 分销(赏)

《面向对象程序设计C++》期末试卷及统一标准答案.doc

上传人:w****g 文档编号:2499384 上传时间:2024-05-30 格式:DOC 页数:14 大小:41.04KB 下载积分:8 金币
下载 相关
《面向对象程序设计C++》期末试卷及统一标准答案.doc_第1页
第1页 / 共14页
《面向对象程序设计C++》期末试卷及统一标准答案.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
《面向对象程序设计C++》期末考试试卷(A) 班级: 姓名: 学号: 分数: 题号 一 二 三 四 总分 得分 试卷阐明:本套试题共四个大题,所有题目都答在答题纸上,写在其她地方均无效。 (答题纸在本套试卷第10页上) 一、选取题(每小题2分,共40分) 1、C++是( C)。 A. 面向对象程序设计语言 B. 面向过程程序设计语言 C. 既支持面向对象程序设计又支持面向过程程序设计混合型语言 D. 非构造化程序设计语言 2、面向对象程序设计思想重要特性中不涉及( D )。 A. 封装性 B. 多态性 C. 继承性 D. 功能分解,逐渐求精 3、若定义:string str; 当语句cin>>str;执行时,从键盘输入: Microsoft Visual Studio 6.0! 所得成果是str=( B )。 A. Microsoft Visual Studio 6.0! B. Microsoft C. Microsoft Visual D. Microsoft Visual Studio 6.0 4、考虑下面函数原型声明:void testDefaulParam(int a,int b=7,char z='*'); 下面函数调用中,不合法是( C )。 A. testDefaulParam(5); B. testDefaulParam(5,8); C. testDefaulParam(5,'#'); D. testDefaulParam(0,0,'*'); 5、下列语句中,将函数int sum(int x,int y)对的重载是( C )。 A. float sum(int x,int y); B. int sum(int a,int b); C. float sum(float x,float y); D. double sum(int y,int x); 6、下列表达引用办法中,( A )是对的。 已知:int a=1000; A. int &x=a; B. char &y; C. int &z=1000; D. float &t=&a; 7、在一种函数中,规定通过函数来实现一种不太复杂功能,并且规定加快执行速度,选用( A )。 A. 内联函数 B. 重载函数 C. 递归调用 D. 嵌套调用 8、下列关于C++类说法中,不对的是( D )。 A. 类是一种顾客自定义数据类型 B. 只有类中成员函数或类友元函数才干存取类中私有成员 C. 在类中,如果不做特别阐明,所有成员访问权限均为私有 D. 在类中,如果不做特别阐明,所有成员访问权限均为公用 9、已知X类,则当程序执行到语句:X array[3];时,调用了( D )次构造函数。 A. 0 B. 1 C. 2 D. 3 10、下面说法中,对的是( B) A. 一种类只能定义一种构造函数,但可以定义各种析构函数 B. 一种类只能定义一种析构函数,但可以定义各种构造函数 C. 构造函数与析构函数同名,只要名字前加了一种求反符号(~) D. 构造函数可以指定返回类型,而析构函数不能指定任何返回类型,虽然是void类型也不可以 11、已知:print( )函数是一种类常成员函数,它无返回值,下列表达中,( A )是对的。 A. void print( ) const; B. const void print( ); C. void const print( ); D. void print(const); 12、下面描述中,表达错误是( B ) A. 公用继承时基类中public成员在派生类中仍是public B. 公用继承时基类中private成员在派生类中仍是private C. 公用继承时基类中protected成员在派生类中仍是protected D. 私有继承时基类中public成员在派生类中是private 13、设立虚基类目是( B  )。 A. 简化程序 B. 消除二义性 C. 提高运营效率 D. 减少目的代码 14、下面( B )论述不符合赋值兼容规则。 A. 派生类对象可以赋值给基类对象 B. 基类对象可以赋值给派生类对象 C. 派生类对象可以初始化基类对象 D. 派生类对象地址可以赋值给指向基类指针 15、关于虚函数描述中,( C )是对的。 A. 虚函数是一种static类型成员函数 B. 虚函数是一种非成员函数 C. 基类中阐明了虚函数后,派生类中与其相应函数可不必阐明为虚函数 D. 派生类虚函数与基类虚函数具备不同参数个数和类型 16、下面关于友元描述中,错误是( D )。 A. 友元函数可以访问该类私有数据成员 B. 一种类友元类中成员函数都是这个类友元函数 C. 友元可以提高程序运营效率 D. 类与类之间友元关系可以继承 17、下列关于静态数据成员说法,不对的是( C )。 A. 类中定义公用静态数据成员,可以通过类对象来访问 B. 类中定义所有静态数据成员,都必要在类外初始化 C. 静态数据成员不是所有对象所共用 D. 普通成员函数可以直接访问类中静态数据成员 18、如果表达式++i*k中“++”和“*”都是重载友元运算符,若采用运算符函数调用格式,则表达式还可以表达为( B )。 A. operator*(i.operator++(),k) B. operator*(operator++(i),k) C. i.operator++().operator*(k) D. k.operator*(operator++(i)) 19、下面对模板声明,对的是( C )。 A. template<T> B. template<class T1,T2> C. template<class T1,class T2> D. template<class T1;class T2> 20、下列各类函数中,( C )不是类成员函数 A. 构造函数 B. 析构函数 C. 友元函数 D. 复制构造函数 二、填空题(前14个空,每空1分,后3个空,每空2分,共20分) 1、类和对象关系可表述为:类是对象 抽象 ,而对象则是类 实例 。 2、静态成员函数没有隐含 this指针 ,因此,在C++程序中,静态成员函数重要用来访问静态数据成员,而不访问非静态成员。 3、在图1中,A,B,C,D,E,F均是类,其中属于单继承派生类有 E ,属于多继承派生类有 D、F ,类F基类有 A、B、C、D、E ,类A派生类有 D、F 。 A B C D E F 图1 类继承层次图 4、如果只想保存公共基类一种复制,就必要使用核心字 virtual 把这个公共基类声明为虚基类。 5、从实现角度来讲,多态性可以划分为两类: 静态多态性 和 动态多态性 。 6、如果一种类包括一种或各种纯虚函数,则该类称为 抽象类 。 7、若要把void fun()定义为类A友元函数,则应在类A定义中加入语句 friend void fun(A &a) 。 8、列出C++中两种代码复用方式: 继承 和 组合 或模板 9、析构函数作用是 在对象被系统释放之前做某些内存清理工作 10、假定A是一种类名,则该类拷贝构造函数原型阐明语句为: A(const A&) 11、后置自增运算符“++”重载为类成员函数(设类名为A)形式为:A operator++(int) 三、阅读下面4个程序,写出程序运营时输出成果。(共13分) 1、 #include<iostream > using namespace std; void fun(int &a,int &b) { int p; p=a;a=b;b=p; } void exchange(int &a,int &b,int &c) { if( a<b ) fun(a,b); if( a<c ) fun(a,c); if( b<c ) fun(b,c); } int main() { int a=12,b=89,c=56; exchange(a,b,c); cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl; return 0; } 解1、a=89,b=56,c=12 2、 #include <iostream> using namespace std; class A { public: A( ) { cout << "A";} }; class B { public: B( ) { cout <<"B";} }; class C:public A { public: C( ) { cout << "C";} private: B b; }; int main ( ) { C obj; return 0; } 解2、ABC 3、 #include <iostream> using namespace std; class A {public: A(){cout<<"A::A() called.\n";} virtual ~A(){cout<<"A::~A() called.\n";} }; class B:public A {public: B(int i) { cout<<"B::B() called.\n"; buf=new char[i]; } virtual ~B() { delete []buf; cout<<"B::~B() called.\n"; } private: char *buf; }; int main() { A *a=new B(15); delete a; return 0; }解3、A::A() called. B::~B() called. A::~A() called. B::B() called. 4、 #include <iostream> using namespace std; class A {public: void f(){cout<<"Call A's function f()"<<endl;} }; class B {public: void f() {cout<<"Call B's function f()"<<endl;} void g() {cout<<"Call B's function g()"<<endl;} }; class C:public A,public B {public: void g(){cout<<"Call C's function g()"<<endl;} }; int main() { C cc; cc.B::f(); cc.B::g(); cc.g(); return 0; }解4、Call B's function f() Call B's function g() Call C's function g() 四、编程题(27分) 1、(10分) 已知复数类Complex声明如下: class Complex {public: Complex(); //无参构造函数 Complex(double ); //转换构造函数 Complex(double,double); //有两个形参构造函数 friend Complex operator+(Complex&,Complex&); //对“+”运算符进行重载 friend ostream& operator<<(ostream&,Complex&); //对“<<”运算符进行重载 friend istream& operator>>(istream&,Complex&); //对“>>”运算符进行重载 private: double real,imag; }; 规定:(1)写出该类所有构造函数类外定义代码。 (2)写出对运算符“+”、“<<”、“>>”进行重载运算符重载函数定义。 2、(17分)下列Shape类是一种表达形状抽象类,area( )为求图形面积函数,total( )则是一种通用用以求不同形状图形面积总和函数。 class Shape {public: virtual double area()=0; }; double total(Shape *s[ ],int n) { double sum=0.0; for(int i=0;i<n;i++) sum+=s[i]->area( ); return sum; } 规定:(1)从Shape类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类均有构造函数,修改、显示数据成员值函数,求面积函数。 (2)写出main()函数,计算半径为5.5圆和边长为9.9正方形面积和(必要通过调用total函数计算)。 四、编程题(共27分) 1、(10分) Complex::Complex(){real=0;imag=0;} Complex::Complex(double r){real=r;} Complex::Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c1,Complex &c2) { Complex c; c.real=c1.real+c2.real;c.imag=c1.imag+c2.imag; return c; } ostream& operator << (ostream& output,Complex& c) { output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl; return output; } istream& operator >> (istream& input,Complex& c) { cout<<"input real and imaginary part of complex number:"; input>>c.real>>c.imag; return input; } 2、(17分) class Circle:public Shape {public: Circle(double r){radius=r;} void set() { cout<<"Please input the value of the circle:"<<endl; cin>>radius; } void show() { cout<<"the radius of the circle="<<radius<<endl; } double area() {return 3.14159*radius*radius;} private: double radius; }; class Square:public Shape {public: Square(double a){this->a=a;} void set() { cout<<"Please input the value of a:"<<endl; cin>>a; } void show() { cout<<"a="<<a<<endl; } double area(){return a*a;} private: double a; }; int main() { Circle C(5.5); C.show(); Square S(9.9); S.show(); Shape *s[]={&C,&S}; cout<<"total="<<total(s,2)<<endl; return 0; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服