选择题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,编写入栈和出栈的成员函数代码。