面向对象程序设计复习题

  • 格式:doc
  • 大小:80.00 KB
  • 文档页数:8

1 《面向对象程序设计》复习题 一、单项选择题 1. (A)是面向对象系统包含的要素。 A、类 B、多态 C、友元 D、重载 2. 下列对常量的定义中,错误的是( C )。 A、MyClass const obj(3,4); B、char * const p="hello"; C、int i=1; const int &ref=i; D、void show() const; 3. 若有如下函数声明:void Fun(int x);,则下列(D )能与该函数进行重载。 A、void Fun(int y); B、void Fun(int x,int y='1'); C、int Fun(int x); D、void Fun(int) const; 4. 下列对构造函数和析构函数的描述中,错误的是( B )。 A、构造函数可以重载 B、析构函数名与类名相同 C、构造函数中可以设置参数的缺省值 D、类中只有一个析构函数 5. 下列对友元的描述中,错误的是( C )。 A、友元破坏了类的封装性 B、友元提高了程序的运行效率 C、友元可以在类外声明和定义 D、友元能够访问类中的私有成员 6. 下列对继承的描述中,正确的是( C )。 A、派生类对象能够访问基类的公有成员 B、派生类继承了基类的公有成员和保护成员 C、派生类对象不能访问基类的保护成员 D、派生类不改变基类成员的访问权限 7. 程序中,编译时出错的语句是(B )。 class Base{ }; 2

class Derived : public Base { }; Derived objD1; Base objB=objD1; //A Base *pb=&objD1; //B Base &refB=objD1; //C Derived objD2=objB; //D 8. 下面对派生类的描述中,正确的是( B )。 A、派生类是对基类的具体化 B、一个派生类可以作为另一个派生类的基类 C、派生类只能有一个直接基类 D、派生类的缺省继承方式是public 9. 实现动态联遍必须通过(A )调用虚函数。 A、对象引用 B、成员名限定 C、对象名 D、构造函数 10. C++流中重载的运算符>>,是一个(B)。 A、用于输出操作的非成员函数 B、用于输入操作的非成员函数 C、用于输出操作的成员函数 D、用于输入操作的成员函数 11. (A)不是面向对象系统包含的要素。 A、多态 B、对象 C、类 D、继承 12. 下列对常量的定义中,错误的是( C )。 A、int const size=10; B、char * const p="Good Luck"; C、void const print(); D、const MyClass obj(10,10); 13. 设Address表示整型变量x的地址,则下列语句执行后的输出结果为(D )。 int x=100,&r=x; cout

A、void Fun(int x,int y); B、void Fun(double x); C、void Fun(int x,int y=1); D、void Fun(int x) const; 16. 下列对构造函数和析构函数的描述中,正确的是(A )。 A、析构函数不可以重载 B、构造函数不能定义为内联函数 C、构造函数中不能设置参数的缺省值 D、析构函数名与类名不同 17. 下面对静态成员的描述中,错误的是( C )。 A、静态成员的提出是为了解决数据共享问题 B、静态数据成员的初始化在类体外进行 C、类的不同对象有不同的静态数据成员值 D、静态成员函数可以直接访问类中的静态数据成员 18. 下列对友元的描述中,正确的是( D )。 A、友元可以在类外声明和定义 B、友元降低了程序的运行效率 C、友元不能访问类中的保护成员 D、友元破坏了类的封装性 19. 下列对继承的描述中,错误的是( C )。 A、派生类对象不能访问基类的保护成员 B、派生类对基类成员的访问权限随着继承方式而改变 C、派生类成员可以访问基类的私有成员 D、派生类继承了基类的所有成员 20. 程序中,编译时出错的语句是(D )。 class Base{ }; class Derived : public Base { }; Derived objD1; Base objB=objD1; //A Base *pb=&objD1; //B Base &refB=objD1; //C Derived objD2=objB; //D 4

21. 下面对派生类的描述中,错误的是( A )。 A、派生类是对基类的具体化 B、派生类能够作为基类继续派生新类 C、派生类可以有多个直接基类 D、派生类的缺省继承方式是private 22. 实现动态联遍不能通过(A )调用虚函数。 A、构造函数 B、对象引用 C、对象指针 D、成员函数 23. 下面( D )不是抽象类的特性。 A、可以说明纯虚函数 B、不能说明抽象类的对象 C、用做基类,提供公共的接口 D、可以定义虚构造函数 24. C++流中重载的运算符<<,是一个(B)。 A、用于输出操作的成员函数 B、用于输出操作的非成员函数 C、用于输入操作的成员函数 D、用于输入操作的非成员函数

二、程序填充题 1. 下列运算符既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在表格中的空白处填上正确的表达式。 表达式 成员函数 友元函数 a+b (1) (2) a++ (3) operator ++ (a, 0) -a a.operator - ( ) (4) 1. 答案: (1) a.operator+(b) (2) operator +(a,b) (3) a.operator++(0) (4) operator –(0)

2. 下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。 #include void fun1( (1) , int b) { int c; c=a; a=b; b=c; } void fun2( (2) , int *b) { int c; c=*a; (3) ; *b=c; } 5

void fun3( (4) , int b) { int c; c=a; (5) ; b=c; } void main(){ int x,y; x=1; y=2; fun1(x,y); cout

三、阅读程序题 1. #include class Test { public: Test (double m,double n,double d):p(d) { x=m; y=n; } void Show(); void Show() const; private: double x, y; const double p; }; void Test::Show() { cout

合集下载

《面向对象程序设计》编程题复习及其答案.doc

《面向对象程序设计》编程题复习及其答案.doc

《面向对象程序设计》复习题1、(C++的输入输出)天猫优惠券,我就要券定义一个函数max,实现输入两个数a、b,比较并从小到大输出。

2、(函数的重载)(1)定义一个带两个参数的函数max,输出最大值。

(2)再定义一个带三个参数的函数max,输出最大值。

(3)主函数测试之。

3、(有默认参数的函数)将题2用带默认参数的函数实现。

4、(变量的引用)(1)定义一个swap1函数,以普通形参传入两个变量a、b,互换a、b的值。

(2)定义一个swap2函数,以指针形参传入两个变量a、b,互换a、b的值。

(3)定义一个swap3函数,以引用形参输入两个变量a、b,互换a、b的值。

(4)主函数定义两个变量x、y传入三个函数,观察x、y值前后的变化。

5、(类的定义)定义一个student类,数据成员包括:学号num,姓名name,年龄age,性别sex,成员函数包括:(1) set函数,键盘输入学号,姓名,年龄,性别(2) display函数,输出学生信息。

6、(构造函数和析构函数)定义一个student类,数据成员包括:学号num,姓名name,年龄age,性别sex,成员函数包括:(1)构造函数,初始化学号,姓名,年龄,性别(2)display函数,输出学生信息。

(3)析构函数,输出学生学号。

(4)主函数定义多个对象,并注意构造函数和析构函数的调用顺序。

7、(构造函数的重载)在题6基础上增加一个默认构造函数,实现构造函数的重载8、将题6用带默认参数的构造函数实现。

9、(对象数组和对象的动态建立及释放)在题8基础上,实现如下主函数:(1)在主函数中定义一个包含三个学生的数组,并初始化之。

(2)在主函数中定义一个student类指针p并用new运算符分配动态内存(3)用delete删除p指向的动态内存。

(4)观察构造函数和析构函数的调用。

10、(复制构造函数)在题8基础上新增加一个复制构造函数,并主函数新增复制构造对象。

《面向对象程序设计c++》复习题

《面向对象程序设计c++》复习题

《面向对象程序设计》综合复习题集一、程序填充1. 1. 已知一个类的定义如下:已知一个类的定义如下:已知一个类的定义如下:#include<iostream.h>class AA {int a[10];int n;public: void SetA(int aa[], int nn); //void SetA(int aa[], int nn); //用数组用数组aa 初始化数据成员a ,// //用用nn 初始化数据成员nint MaxA(); //int MaxA(); //从数组从数组a 中前n 个元素中查找最大值个元素中查找最大值void SortA(); //void SortA(); //采用选择排序的方法对数组采用选择排序的方法对数组a 中前n 个元素个元素// //进行从小到大排序进行从小到大排序进行从小到大排序void PrintA(); //void PrintA(); //依次输出数组依次输出数组a 中的前n 个元素,个元素,// //最后输出一个换行最后输出一个换行最后输出一个换行};使用该类的主函数如下:使用该类的主函数如下:使用该类的主函数如下:void main() {int a[10]={23,78,46,55,62,76,90,25,38,42};___AA x___;x.SetA(a,8);int ___m___;_m=x.MaxA()___;x.PrintA();cout<<m<<endl;}该程序运行结果为该程序运行结果为该程序运行结果为: : 23 25 46 55 62 76 78 9090(1) (2) (3)2 2..class A {char *a;public:A( ){ a=NULL;} _______________ // A( ){ a=NULL;} _______________ //定义无参构造函数,使定义无参构造函数,使a 的值为空的值为空A(char *aa) {a=_new char[strlen(aa)];strcpy(a,aa); // strcpy(a,aa); //用用aa 所指字符串初始化a 所指向的动态存储空间所指向的动态存储空间}~A( ){ delete []a; } // ~A( ){ delete []a; } //定义析构函数,删除定义析构函数,删除a 所指向的动态存储空间所指向的动态存储空间};(1) (2) (3)int a,b;public:A(int aa=0, int bb=0){ a=aa;b=bb;} // A(int aa=0, int bb=0){ a=aa;b=bb;} //分别用分别用aa 和bb 对应初始化a 和b };main() {A x(5),y(x) ; // A x(5),y(x) ; //定义类定义类A 的对象x 并用5初始化,同时定义y 并用x 初始化初始化A *p=&x ; // A *p=&x ; //定义定义p 指针,使之指向对象x }(1) (2) (3)3.class A {int a,b;public:___(1)__A_(int aa=0,int bb=0) // ___(1)__A_(int aa=0,int bb=0) //定义构造函数,使参数定义构造函数,使参数aa 和bb 的默认值为0, A=aa;b=bb; // A=aa;b=bb; //在函数体中用在函数体中用aa 初始化a ,用bb 初始化b};main() { A *p1, *p2;___(2)p1=new A();___ ; // ___(2)p1=new A();___ ; //调用无参构造函数生成由调用无参构造函数生成由p1指向的动态对象指向的动态对象___(3)_p2=new A(4,5)__ ; // ___(3)_p2=new A(4,5)__ ; //调用带参构造函数生成由调用带参构造函数生成由p2指向的动态对象,指向的动态对象, // //使使a 和b 成员分别被初始化为4和5}(1) (2) (3)4. #include<iostream.h>#include<stdlib.h>class A { int *a; int n; int MaxLen;public:A(): a(0), n(0), MaxLen(0) {}A(int *aa, int nn, int MM) {n=nn;MaxLen=MM;if(n>MaxLen) exit(1);___(1)_a=new int[MaxLen]__; // ___(1)_a=new int[MaxLen]__; //由由a 指向长度为MaxLen 的动态数组的动态数组 for(int i=0; i<n; i++) a[i]=aa[i];}~A() {delete []a;}int GetValue(int i) ___(2)___ // int GetValue(int i) ___(2)___ //函数体返回函数体返回a[i]a[i]的值的值的值};void main(){int b[10]={1,2,3,4,5,6,7,8,9,10};A r(b,10,10);int i,s=0;// //元素值依次累加到元素值依次累加到s 中cout<<"s="<<s<<endl;}(1) (2) (3)5. #include<iostream.h> #include<stdlib.h>class A {int *a; int n; int MaxLen;public:A(): a(0), n(0), MaxLen(0) {}A(int *aa, int nn, int MM) {n=nn;MaxLen=MM;if(n>MaxLen) exit(1);a=new int[MaxLen];___(1)___; // ___(1)___; //以以i 为循环变量把aa 数组中每个元素值数组中每个元素值 // //传送给传送给a 数组的对应元素中数组的对应元素中}~A();int GetValue(int i) {return a[i];} // int GetValue(int i) {return a[i];} //函数体返回函数体返回a[i]a[i]的值的值的值};___(2)___ //___(2)___ //析构函数的类外定义析构函数的类外定义析构函数的类外定义void main(){int b[10]={1,2,3,4,5,6,7,8,9,10}; A r(b,10,10);int i,s=0;___(3)___ ; // ___(3)___ ; //以以i 为循环变量,把r 对象的a 数据成员中的数据成员中的// //每个元素值依次累加到每个元素值依次累加到s 中cout<<"s="<<s<<endl;}(1) (2) (3)6. 6. 一种类定义如下一种类定义如下一种类定义如下: :class Goods{private:char gd_name[20]; // char gd_name[20]; //商品名称商品名称商品名称int weight; // int weight; //商品重量商品重量商品重量static int totalweight; // static int totalweight; //同类商品总重量同类商品总重量同类商品总重量public:Goods (char*str,int w){ //Goods (char*str,int w){ //构造函数构造函数构造函数weight=w;totalweight+=weight;}~ Goods (){totalweight -= weight;}char* GetN(){___(1)___;} // char* GetN(){___(1)___;} //返回商品名称返回商品名称返回商品名称int GetW(){return weight;}___(2)___ GetTotal_Weight() { //___(2)___ GetTotal_Weight() { //定义静态成员函数返回总重量定义静态成员函数返回总重量定义静态成员函数返回总重量 ___(3)___;}}(1) (2) (3)7.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)___; // ___(1)___; //友元函数声明友元函数声明友元函数声明___(2)___; // ___(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) (2) (3)8. 8. 在下面一段类定义中,在下面一段类定义中,Derived 类是由直接基类Base 1和Base 2所派生的,Derived 类包含有两个间接基类BaseBase BaseBase,在初始化函数,在初始化函数Init 中,需要把x1和x2的值分别赋给属于基类Base1的x 成员和属于基类Base2的x 成员。

《面向对象程序设计》复习题

《面向对象程序设计》复习题

一、选择题1、下列各项中,()不是面向对象程序设计方法的特点。

A. 继承性B. 健壮性C. 封装性D. 多态性2、下列有关类和对象的叙述中,正确的是()。

A. 类和对象是同义词B. 类的声明中不能省略用于初始化对象的构造函数C. 对象可以作为函数的参数,也可以由函数返回D. 同类的对象之间构造可以不同3、类中的私有数据指的是()。

A. 访问该数据时,必须确认口令B. 该数据经过加密处理,访问时需解密C. 封装于函数内部且不能直接访问的数据D. 封装于对象内部且不能直接访问的数据4、构造函数的功能是()。

A. 初始化新建立的对象B. 用已有对象初始化新建对象C. 为对象的所有成员分配存储空间D. 为数据成员分配存储空间5、拷贝构造函数的功能是()。

A. 用已知对象初始化另一个对象B. 用对象调用成员函数C. 为数据成员重新分配存储空间D. 用其它类型的数据初始化对象6、下列关于运算符重载的叙述中,正确的是()。

A. 所有的单目运算符都不能被重载B. 运算符被重载后,其原有的优先级与结合性不变C. 需要时,可以自定义一个新的运算符来进行重载D. 运算符都可以用成员函数和友元函数两种形式重载7、有如下类的声明:class oneType{ private:int a;protected:int b;public:int c;};已知x是oneType类的对象,下列语句中,()是正确的。

A. x.a=0;B. x.b=0;C. x.c=0;D. T::a=0;8、以下不能声明为虚函数的是()。

A. 成员函数B. 派生类的成员函数C. 静态成员函数D. 析构函数9、下列情形中不可以重载同名函数的是()。

A. 参数个数不同B. 对应的参数类型应不同C. 满足A或BD. 参数的个数和对应类型相同10、以下程序段的作用是动态建立一个()。

int **p;p=new int *[3];for(int j=0; j<3; j++) p[j]=new int[4];A. 4行3列的二维数组B. 3行4列的二维数组C. 大小为12的一维指针数组D. 地址连续的3行4列的二维数组11、有如下参数形式的函数定义,这表示()。

面向对象程序设计复习题汇总.doc

面向对象程序设计复习题汇总.doc

A、对数据的操作B、信息C、数据隐藏D、数据抽象3、当一个函数无返回值时,函数的类型应定义为()A、voidB、任意C、int D、无4、对于C的函数,正确的叙述是A、函数的定义不能嵌套,但函数的调用可以嵌套B、函数的定义不能嵌套,但函数的调用不能嵌套C、函数的定义和调用都不能嵌套D、函数的定义和调用都可以嵌套5、下列语句中错误的是()A、int *pnew int10;B、int *pnew int[10] C、int *pnew int;D、int *pnew int[40]0; 6、假设已经有定义const char *const name”chen”;,下面的语句中正确的是()A、name[3]’a’;B、name”lin”;C、namenew char[5];D、cout T maxT x,T y{ returnxyxy;}并定义了int i;char c;错误的调用语句是()A、maxi,iB、maxc,cC、maxintc,i;D、maxi,c 11、模板的使用是为了()A、提高代码的可重用性B、提高代码的运行效率C、加强类的封装性D、实现多态性12、设有二个语句int x[‘a’];cinx;则编译器认为()A、说明语句int x[‘a’]错B、二个语句都错C、语句cinx错D、二个语句正确,没有语法错13、设有语句void fint a[10],int int y[10],*pyy,n;则对函数f的正确调用语句是A、fpy[10],n;B、fpy,nC、f*py,语句打开文件Sales.dat后,则()A、使输出追加到文件尾部B、打开一个文件进行读操作C、打开一个文件进行读和写操作D、文件以二进制方式打开,默认时为文本文件
A、对象是类的一个实例B、任何一个对象只能属于一个具体的类C、一个类只能有一个对象D、类与对象的关系和数据类型和变量的关系相似19、有以下类的说明,请指出错误的地方()。