综合题三及答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、程序填空题,请按提示要求完成以下程序段的填空。 23.在下面一段类定义中, Derived 类是由直接基类 Base 1 和 Base 2 所派生的,Derived 类包含有两 个间接基类 BaseBase,在初始化函数 Init 中,需要把 x1 和 x2 的值分别赋给属于基类 Base1 的 x 成员和属于基类 Base2 的 x 成员。 class BaseBase { protected: int x; public: BaseBase( ){ x = 1;} }; class Base1: public BaseBase {
6.在哪种情况下适宜采用 inline 定义内联函数?( A.函数体含有循环语句 C.函数代码少、频繁调用 7.在关键字 public 后面定义的成员为类的( A.私有成员 C.保护成员
B.函数体含有递归语句 D.函数代码多、不常调用 ) B.公用成员 D.任何成员 )
8. 以下哪个基类中的成员函数表示纯虚函数?( A.virtual void tt()=0
27.# include<iostream.h> class position{ public: int x,y; void init(int initx,int inity); int getxvalue( ); int getyalue( );
5
}; void position::init (int initx,int inity) { x=initx; y=inity; } int position::getxvalue( ) { return x; } int position::getyalue( ) { return y; } void printout(position & rl) { cout<<rl. getxvalue( )<< " "<<rl.getyalue()<< '\n' ; } void main( ) { position a[6] ={{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}};
B.void tt(int) = 0
1
C.virtual void tt(int) 9.假定 AA 是一个类, “AA *
D.virtual void tt(int){} abc( ) const;”是该类中一个成员函数的原型,若该函数返回 this )
值,当用 x.abc()调用该成员函数后,x 的值( A.已经被改变 C.不变
四、程序分析题
4
26.#include<iostream.h> class test{ private: static int val; int a; public: static int func( ); static void sfunc(test &r); }; int test::val=10; int test::func( ) { val--; return val; } void test::sfunc(test &r) { r.a=15; cout<< " result3= " <<r.a; } void main( ) { cout<< " resultl= " <<test::func( )<<endl; test a; cout<< " result2= " <<a.func( )<<endl; test::sfunc(a); }
25.下面是一维数组类 ARRAY 的定义,ARRAY 与普通一维数组区别是:(1)用()而不是[]进行下标 访问,(2)下标从 1 而不是从 0 开始,(3)要对下标是否越界进行检查。 class ARRAY{ int *v; //指向存放数组数据的空间 int s;//数组大小 public: ARRAY(int a[ ], int n); ~ ARRAY( ){delete [ ]v;} int size( ){ return s;} int& operator ( )(int n); }; ____________(7)____________ operator()(int n) { // ()的运算符函数定义 if(____________(8)____________) {cerr<<"下标越界!"; exit(1);}//exit 函数的功能是退出程 序运行 return ____________(9)____________; } (7) (8) (9)
B.可能被改变 D.受到函数调用的影响 )
10.C++ 对 C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是( A.增加了一些新的运算符 B.允许函数重载,并允许设置缺省参数 C.规定函数说明符必须用原型 D.引进了类和对象的概念
二、填空题
11.如果一个派生类只有一个唯一的基类,则这样的继承关系称为____________。 12.C++支持两种多态性:____________时的多态性和运行时的多态性。 13.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直 接继承它。 14.所有模板都以 template 关键字和一个____________表开头。 15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的____________语句。 16.类型转换函数没有返回值类型,而且参数表为____________。 17.C++提供的预处理命令有嵌入指令,条件编译指令和____________。 18.对象将其大部分实现细节隐藏起来,这种机制称为____________。 19.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。 20.在函数体之前加____________关键字可以防止覆盖函数改变数据成员的值。
setA(int x) {*a=x;}
ห้องสมุดไป่ตู้
p->setA( x2.getA( ) + 5 ); x1.setA( 15 + x1.getA( ) ); cout<< x1.getA( ) <<’ ’<< x2.getA( ) << endl; }
2
public: Base1( ){ } }; class Base2: public BaseBase { public: Base2 ( ){ } }; class Derived: ____________(1)____________ { public: Derived( ) { } void Init(int x1, int x2) { ____________(2)____________; ____________(3)____________; } void output( ) {cout<<Base1::x<<’ ’<<Base2::x<<endl;} };
p=new A[3]; delete [ ] p; }
31.#include<iostream.h> class A { int public: A(int x=0) : a( new ~A( ) {delete a;} int void }; void A A main( ) { x1 , x2( 3 ); *p= &x2; getA( ) {return *a;} int ( x ) ) { } *a;
29.#include <iostream.h> class complex { int real; int imag; public: complex( int r=0 , int i=0 ): real( r ),imag( i ){ } complex operator++( ){ real ++ ; return *this; }
position *pa=a; a[2].init(7,8); pa->init(5,6); for (int i=0;i<5;i++) printout(*(pa++)); }
28.#include <iostream.h> class test{ public: virtual void fun1( ){ cout << "test fun1" <<endl;} virtual void fun2( ){ cout << "test fun2" <<endl;}
(1)
(2)
(3)
24.#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]; ____________(4)____________; //以 i 为循环变量把 aa 数组中每个元素值 //传送给 a 数组的对应元素中 } ~A( ); int GetValue(int i) {return a[i];} //函数体返回 a[i]的值
3
};
____________(5)____________//析构函数的类外定义
void main( ) { int b[10]={1,2,3,4,5,6,7,8,9,10}; A r(b,10,10); int i,s=0; ____________(6)____________ ; //以 i 为循环变量,把 r 对象的 a 数据成员中的 //每个元素值依次累加到 s 中 cout<<"s="<<s<<endl; } (4) (5) (6)
综合题三及答案
一、单项选择题
1.以下说法中正确的是(
)
A.C++程序总是从第一个定义的函数开始执行 B.C++程序总是从 main 函数开始执行 C.C++函数必须有返回值,否则不能使用函数 D.C++程序中有调用关系的所有函数必须放在同一个程序文件中 2.以下关于函数模板叙述正确的是( A.函数模板也是一个具体类型的函数 B.函数模板的类型参数与函数的参数是同一个概念 C.通过使用不同的类型参数,函数模板可以生成不同类型的函数 D.用函数模板定义的函数没有类型 3.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( A.作为友元函数重载的 1 元运算符 B.作为成员函数重载的 1 元运算符 C.作为友元函数重载的 2 元运算符 D.作为成员函数重载的 2 元运算符 4.构造函数不具备的特征是 ( A.构造函数的函数名与类名相同 B.构造函数可以重载 C.构造函数可以设置默认参数 D.构造函数必须指定类型说明 5.在 C++中,封装是借助什么达到的( A.结构 C.类 ) B.数组 D.函数 ) ) ) )
void show( ){ cout<<real << endl << imag; } }; void main( ) { complex c(5,9); ++c; c.show( ); }
7
30.#include<iostream.h> class A { int a; public: A(int aa=0): a(aa) {cout<<a<<endl;} ~A( ) {cout<<"11"<<endl;} }; void main( ) { A *p; A x[2]={ 1 , 2 };
6
void fun3( ){ cout << "test fun3" <<endl;} }; class ftt:public test { public: void fun1( ){cout <<"ftt fun1"<<endl;} virtual void fun2( ){cout << "ftt fun2"<<endl;} virtual void fun3( ){cout << "ftt fun3"<<endl;} }; void main( ) { test *pp; ftt q; pp = &q; pp->fun1( ); pp->fun2( ); pp->fun3( ); }
相关文档
最新文档