一.单项选择题(本大题共15小题,每小题3分,共 45分) 1. 关于C++与C语言关系的描述中,( )是错误的。 ( D ) A. C语言是C++语言的一个子集 B. C语言与C++语言是兼容的 C. C++语言对C语言进行了一些改进 D. C++语言和C语言都是面向对象的 2.在下列关键字中,用于说明类中公有成员的是__. ( A ) A. public B. private C. protected D. friend 3.如果编程者没有显式定义构造函数(包括复制构造函数),C++编译器就___。 ( D ) A.出现编译错误 B.没有构造函数 C.必须显示定义 D.隐式定义缺省的构造函数 4.关于成员函数特征的下述描述中,___是错误的。 ( A ) A.成员函数一定是内联函数 B.成员函数可以重载 C.成员函数可以设置参数的缺省值 D.成员函数可以是静态的 5. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( D )。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员 6. 派生类的成员函数可以直接访问基类的( )成员。 ( B ) A. 所有 B. 公有和保护 C. 保护和私有 D. 私有 7. 关于运算符重载,下列说法正确的是( )。 ( C ) A. 重载时,运算符的优先级可以改变。 B. 重载时,运算符的结合性可以改变。 C. 重载时,运算符的功能可以改变。 D. 重载时,运算符的操作数个数可以改变。 8. 对类对象成员的初始化是通过构造函数中给出的( )实现的。 ( B ) A. 函数体 B. 初始化表 C. 参数表 D. 初始化表或函数体 9. 在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。 ( B ) A. 0 B. 1 C. 2 D. 3 | 10. 如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。 ( A ) A. a.operator+(b) B. b.operator+(a) C.operator+(a,b) D. operator(a+b) 11. 当派生类中有和基类一样名字的成员时,一般来说,( )。 ( B ) A. 将产生二义性 B. 派生类的同名成员将覆盖基类的成员 C. 是不能允许的 D. 基类的同名成员将覆盖派生类的成员 12. 下列对派生类的描述中错误的说法是:( )。 ( D ) A. 派生类至少有一个基类 B. 派生类可作为另一个派生类的基类 C. 派生类除了包含它直接定义的成员外,还包含其基类的成员 D. 派生类所继承的基类成员的访问权限保持不变 13. 类的析构函数是一个对象被( )时自动调用的。 ( B ) A. 建立 B. 撤消 C. 赋值 D. 引用 14.静态成员函数仅能访问___。 ( A ) A.静态的数据成员 B.非静态的成员函数 C.非静态的数据成员 D.以上都不对 15. 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( )。 ( A ) A.内联函数 B.重载函数 C.递归调用 D.嵌套调用 二.填空题(本大题共 5小题,每小题 3分,共 15分) 1.面向对象的程序设计有四大特征,它们是抽象、封装、继承 、 多态 。 2. 在面向对象的程序设计中,通过_ 封装 _实现数据隐藏;通过_ 继承 _实现代码的复用。 3.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为 抽象类 ,定义该类至少具有一个 纯虚函数 。 4.类是用户定义的类型,具有类类型的变量称作 对象 。 5.在公有继承的情况下,基类数据成员在派生类中的访问权限 保持不变 。 三.程序填空题.(本大题共 2小题,共 21分) | ||||||||||||||||||||||||||||||||||||||||
******
******
******
******析构函数的定义
******
******
******
******
班级:
******
******
******
******
******
学号:
******
******
******
******
******
******
姓名:
******
******
******
******
******
******
共3页 第1页
1. (9分)class Point { private: int x, y; public: Point(){x=y=0;} Point(int x0,int y0) {x=x0;y=y0;} int GetX() { return x; } int GetY() { return y; } void Print(){cout<<"Point("<<x<<","<<y<<")"<<endl;} ___(1)___; //友元函数声明 ___(2)___; //友元函数声明}; Point operator+(Point& pt,int dd) //加号操作符重载函数,实现Point类对象与整数加法 { Point temp=pt; temp.x+=dd; temp.y+=dd; return temp;} Point operator+(Point& pt1,Point& pt2) //加号操作符重载函数,实现两个Point类对象的加法 { Point temp=pt1; temp.x+=pt2.x; ___(3)___; return temp;} 答案:(1) friend Point operator+(Point& pt,int dd) ----3分 (2) friend Point operator+(Point& pt1,Point& pt2) ----3分 (3) temp.y+=pt2.y ----3分 2.(12分) 已知一个类的定义如下: #include<iostream.h> class AA { private: int a[10]; int n; public: void SetA(int aa[], int nn); //用数组aa初始化数据成员a,用nn初始化数据成员n int MaxA(); //从数组a中前n个元素中查最大值 void SortA(); //采用选择排序的方法对数组a中前n个元素进行从小到大排序 void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序 void PrintA(); //依次输出数组a中的前n个元素}; | 该类中InsertA()函数的实现如下,请在标号位置补充适当的内容。 void ___(1)___ { int i,j; for(i=1; i<n; i++) { int x=a[i]; for(j=i-1; j>=0; j--) if(x<a[j]) ___(2)___; else ___(3)___; a[j+1]=x; }} 使用该类的主函数如下: void main() { int a[10]={23,78,46,55,62,76,90,25,38,42}; AA x; x.SetA(a,6) ; int m=___(4)___; x.PrintA(); cout<<m<<endl;} 该程序运行结果为: 23 78 46 55 62 76 78 答案:(1) AA::InsertA() ----3分 (2) a[j+1]=a[j] ----3分 (3) break2. ----3分 (4) x.MaxA() ----3分 四.程序设计题.(本大题共 1小题,共19分) 分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求: (1) 在两个基类中都包含name(姓名)、age(年龄)、sex(性别)、addr(地址)、tel(电话)等数据成员。 (2) 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在Teacher_Cadre类中还包含数据成员wages(工资)。 (3) 对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。 (4) 在类体中声明成员函数,在类外定义成员函数。 (5) 在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务和工资。 |
******
******
******
******
******
******
******
******
班级:
******
******
******
******
******
学号:
******
******
******
******
******
******
姓名:
******
******
******
******
******
******
共3页 第2
#include<string> #include <iostream> using namespace std; class Teacher {public: Teacher(string nam,int a,char s,string tit,string ad,string t); void display(); protected: string name; int age; char sex; string title; string addr; string tel; }; ----3分 Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t): name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ } void Teacher::display() {cout<<"name:"<<name<<endl; cout<<"age"<<age<<endl; cout<<"sex:"<<sex<<endl; cout<<"title:"<<title<<endl; cout<<"address:"<<addr<<endl; cout<<"tel:"<<tel<<endl; } ----3分 class Cadre {public: Cadre(string nam,int a,char s,string p,string ad,string t); void display(); protected: string name; int age; char sex; string post; string addr; string tel; }; ----3分 | Cadre::Cadre(string nam,int a,char s,string p,string ad,string t): name(nam),age(a),sex(s),post(p),addr(ad),tel(t){} void Cadre::display() {cout<<"name:"<<name<<endl; cout<<"age:"<<age<<endl; cout<<"sex:"<<sex<<endl; cout<<"post:"<<post<<endl; cout<<"address:"<<addr<<endl; cout<<"tel:"<<tel<<endl; } ----3分 class Teacher_Cadre:public Teacher,public Cadre {public: Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w); void show( ); private: float wage; }; ----2分 Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w): Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {} void Teacher_Cadre::show( ) {Teacher::display(); cout<<"post:"<<Cadre::post<<endl; cout<<"wages:"<<wage<<endl; } ----3分 int main( ) {Teacher_Cadre te_ca("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5); te_ca.show( ); return 0; } ----2分 |
共3页 第3页
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论