当前位置:文档之家› 面向对象程序设计习题

面向对象程序设计习题

选择题1. 程序中主函数的名字为()。

A. mainB. MAINC. MainD. 任意标识符2. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择()。

A. 内联函数B.重载函数C.递归函数D.函数模板3. 将两个字符串连接起来组成一个字符串时,选用()函数。

A. strlen()B. strcap()C. strcat()D. strcmp()4. 对于任一个类,用户所能定义的析构函数的个数至多为( )。

A. 0B. 1C. 2D. 任意个5. 对类中引用成员的初始化是通过构造函数中给出的( )实现的。

A. 函数体B. 参数表C. 初始化表D. 初始化表或函数体6. 假定AB为一个类,则执行“AB x(a,5);”语句时将自动调用该类的( )。

A. 带参构造函数B. 无参构造函数C. 拷贝构造函数D. 赋值重载函数7. 对于任一个类,用户所能定义的析构函数的个数至多为( )。

A. 0B. 1C. 2D. 任意个8. 用new运算符创建一维整型数组的正确语句是__________。

A. int *p=new a[10];B.int *p=new float[10];C. int *p=new int[10];D.int *p=new int[5]={1,2,3,4,5}9. 假定有定义“int b[10]; int *pb;”,则不正确的赋值语句为()。

A. pb=b;B. pb=&b[0];C. pb=new int;D. pb=b[5];10. 程序中主函数的名字为()。

A. mainB. MAINC. MainD. 任意标识符11. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择()。

A. 内联函数B.重载函数C.递归函数D.函数模板12. 将两个字符串连接起来组成一个字符串时,选用()函数。

A. strlen()B. strcap()C. strcat()D. strcmp()13. 用new运算符创建一维整型数组的正确语句是__________。

A. int *p=new a[10];B.int *p=new float[10];C. int *p=new int[10];D.int *p=new int[5]={1,2,3,4,5}14. 假定有定义“int b[10]; int *pb;”,则不正确的赋值语句为()。

A. pb=b;B. pb=&b[0];C. pb=new int;D. pb=b[5];15. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为()。

A. x(a)B. x[a]C. x->aD. x.a16. 假定AB为一个类,则执行“AB x(a,5);”语句时将自动调用该类的( )。

A. 带参构造函数B. 无参构造函数C. 拷贝构造函数D. 赋值重载函数17. 对于任一个类,用户所能定义的析构函数的个数至多为( )。

A. 0B. 1C. 2D. 任意个18. 对类中引用成员的初始化是通过构造函数中给出的( )实现的。

A. 函数体B. 参数表C. 初始化表D. 初始化表或函数体19. 如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。

A. a.operator==(b)B. b.operator==(a)C. operator==(a,b)D. operator==(b,a)填空题1.若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上________关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用__________关键字。

2.假定一个类对象数组为A[N],当定义该数组时,将自动调用该类的无参构造函数的次数为________次,当离开它的作用域时,将自动调用该类析构函数的次数为________次。

3.假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类______________的原型语句,而“operator=(AB& x);”为该类______________的原型语句。

4. 在定义一个派生类时,使用__________关键字表示为私有继承,使用__________关键字表示为公有继承。

5. 元素类型为double的二维数组a[4][6]共有________个元素,共占用________字节的存储空间。

6. 假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则a[1][1]和a[2][3]分别被初始化为_______和________。

7. 假定p为指向二维数组int d[4][6]的指针,则p的类型为________,其中一个元素d[i][j]表示成指针访问方式为____________。

8.假定一个类对象数组为A[N],当定义该数组时,将自动调用该类的无参构造函数的次数为________次,当离开它的作用域时,将自动调用该类析构函数的次数为________次。

9. 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[ ]要对下标是否越界进行检查。

class ARRAY{int *v; //指向存放数组数据的空间int s; //数组大小public:ARRAY(int a[], int n);~ARRAY(){delete []v;}int size(){ return s;}int& operator[](int n);};___(1)___ operator[](int n) //[ ]的运算符成员函数定义{if(n<0 || ___(2)___) {cerr<<"下标越界!"; exit(1);}return ___(3)___;}(1) (2) (3)10. 常数-4.205和6.7E-9分别具有__________和__________位有效数字。

11. 元素类型为double的二维数组a[4][6]共有________个元素,共占用________字节的存储空间。

12. 假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则a[1][1]和a[2][3]分别被初始化为_______和________。

13. 假定p为指向二维数组int d[4][6]的指针,则p的类型为________,其中一个元素d[i][j]表示成指针访问方式为____________。

14. 已知变量a定义为“int a=5;”,要使ra成为a的引用,则ra应定义为____________,要使rb指向a,则rb应定义为____________。

15. 若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上________关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用__________关键字。

16.假定一个类对象数组为A[N],当定义该数组时,将自动调用该类的无参构造函数的次数为________次,当离开它的作用域时,将自动调用该类析构函数的次数为________次。

17.假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类______________的原型语句,而“operator=(AB& x);”为该类______________的原型语句。

18. 在定义一个派生类时,使用__________关键字表示为私有继承,使用__________关键字表示为公有继承。

19. 重载一个运算符时,该运算符的__________、__________以及操作符的个数不允许改变。

程序题1.实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b 进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。

实现类B从A继承,覆盖geta(),使其返回a的2倍。

答案:#includeusing namespace std;class A{int a;int b;public:A(int m,int n):a(m),b(n) {}int geta() {return a; }int getb() {return b; }};class B :public A{public:B(int m,int n):A(m,n) {}int geta() {return A::geta()*2; }};void main(){B b(2,2);b.geta();cout<<b.geta()<<endl;}2.写一个函数,找出给定字符串中小写字母字符的个数。

函数的原型为:int CalcAlpha(char*str);函数参数: str为所要处理的字符串;函数返回值:所给字符串中小写字母字符的个数答案:int CalcAlpha(char*str){if(str == NULL) return 0;int number=0;for(int i=0;*(str+i)!=’\0′;i++){if(*(str+i)>=’a'&&*(str+i)<=’z'){number++;};}return number;}3.定义一个图形Shape类并用继承方法定义圆形Circle类.答案:class shape{public:shape(){};};class circle:public shape{public:circle();};4.用函数重载的方法定义两个重名函数,分别找出两实型数中的最小值和三个实型数的最小值.答案:float min(float x1,float x2){return x1>x2?x2:x1;}float min(float x1,float x2,float x3){return min(min(x1,x2),x3);}5..实现一个Point类(数据成员为一个点在两维直角坐标系内的坐标);派生一个圆Circle类;要求圆能计算周长,能够画出一个圆。

6.定义一个复数类Complex,要求复数类重载“*”;能够将复数对象转换为一个整数。

#include<iostream>using namespace std;class complex{public:complex(int r=0,int i=0,int me=0){real=r;imag=i;m=me;}complex operator * (complex c2);void display();void display1();private:int real;int imag;int m;};complex complex::operator *(complex c2){complex c;c.real=c2.real*real;c.imag=c2.imag*imag;c.m=c.real-c.imag;return complex(c.real,c.imag,c.m);}void complex::display(){ cout<<”(“<<real<<”,”<<imag<<”)”<<endl; } void complex::display1(){ cout<<m<<endl; }void main(){ complex c1(5,4),c2(2,10),c3;cout<<”c1=”; c1.display();cout<<”c2=”; c2.display();c3=c1*c2;cout<<”c3=c1*c2=”;c3.display1();}7.假设已定义了一个栈类Stack,编写入栈和出栈的成员函数代码。

相关主题