1、题序一二三四五六七八总评计分试题一、选择题(每题1分,共20分)1. 所谓数据封装就是将一组数据和与这组数据有关的操作组装在一起,形成一个实体,这个实体定义成( )。 AA. 类 B. 对象 C. 函数体 D. 数据块2假定A是一个类,则执行“A *p=new A10;”语句时共调用该类构造函数的次数是( )。DA. 1 B. 2 C. 11 D. 10 3已知定义了类Person,则Person类的复制构造函数声明应定义正确的是( )。BA. void Person(Person& p); B. Person(const Person&C. Person Person(Person& p)
2、D. Person(Person p);4下列不能作为类的成员的是( )。A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象5下述静态数据成员的特征中,( )是错误的。A. 说明静态数据成员时前边要加修饰符staticB. 静态数据成员在类内进行初始化C. 引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符D. 静态数据成员是所有对象共用的6已知类A是类B的友元,类B是类C的友元,则( )。A类A一定是类C的友元B类C一定是类A的友元C类C的成员函数可以访问类B的对象的任何成员D类A的成员函数可以访问类B的对象的任何成员7. 对于常成员函数,下面描
3、述正确的选项是( )。CA. 类的成员函数可以操作常对象 B. 类的成员函数不能操作常对象C. 只有常成员函数可以操作常对象 D. 在常成员函数中,常对象可以被更新8.有如下类定义:class MyBASE int k;public: void set(int n) k=n; int get( ) const return k;class MyDERIVED: protected MyBASEprotected; int j; void set(int m,int n)MyBASE:set(m);j=n; int get( ) constreturn MyBASE:get( )+j;则类MyD
4、ERIVED中保护成员个数是( )。A4 B3 C2 D19. 有下列代码: 1 class Fred; 2 class Barney 3 Fred x; 4 Fred *p; 5 ; 6 class Fred 7 Barney y; 8 ;有错误的地方是( )。A. 第1行: class Fred; B. 第3行: Fred x;C. 第4行: Fred *p; D. 第7行: Barney y;10. 需要一种逻辑功能一样的函数,而编制这些函数的程序文本完全一样,区别只是数据类型不同。对于这种函数,下面不能用来实现这一功能的选项是( )。 DA宏函数 B为各种类型都重载这一函数 C模板 D
5、友元函数11为正确执行以下程序,则函数定义正确的是( )。B #include void main() print(2,3.4);A. template void print(T arg1, T arg2) cout arg1: arg1 endl;arg2: arg2 B. template void print(T1 arg1, T2 arg2) C. void print(int arg1, int arg2) D. template void print(T arg1, int arg2) 12以下基类哪个表示抽象类( )。C Aclass MyClassvirtual void vf
6、(int);Bclass MyClassvoid vf(int)=0;Cclass MyClassvirtual void vf( )=0;Dclass MyClassvirtual void vf(int) ;13下面关于虚函数和函数重载的叙述不正确的是( )。AA. 虚函数不是类的成员函数B. 虚函数实现了C+的多态性C. 函数重载允许非成员函数,而虚函数则不行D. 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定14如果表达式+i*k时中的“+”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( )。A)operator*(i.operator+(
7、),k) B)operator*(operator+(i),k)C)i.operator+().operator*(k) D)k.operator*(operator+(i)15下列关于虚函数的说法,错误的是( )。A. 需要通过基类的对象、指针或者引用来调用虚函数 B. 派生类中的虚函数必须与基类中的虚函数同名,但参数的个数可以不一样 C. 一个函数如果被定义成虚函数,经历多次派生后,其虚特性将不会保持D. 设置虚函数的目的是消除二义性16有如下程序:#includeusing namespace std;class Baseprivate: void fun1( ) const cout”
8、fun1”;protected: void fun2( ) const cout”fun2”; void fun3( ) const cout”fun3”;class Derived : protected Base public: void fun4( ) const cout”fun4”;int main() Derived obj; obj.fun1( ); / obj.fun2( ); / obj.fun3( ); / obj.fun4( ); /其中没有语法错误的语句是( )。A B C D17. 有如下类定义: class AA int a; int getRef( ) const
9、 return &a; / int getValue( ) const return a; / void set(int n) consta=n; / friend void show(AA aa) const cout /其中的四个函数定义中正确的是 ( )。 BA B C D18. 下面程序使用new与delete命令,下面是对这段程序的叙述,其中正确的是( )。int main( ) long *p , i; p=new long; if(!p) cout”Allocation errorn”;return 1;*p=1000;i=(long)p;cout”Here is integer
10、 at p:”*p”n”;”Here is i: “idelete p;return 0;A. 有错误,编译不能通过B 正确,执行结果为:1000 1000C 正确,但执行结果的第二个数值不定D 正确,执行结果的各个数值均不为100019. 要求打开文件test.dat,可读出数据,正确的语句是( )DA. ifstream myFile(“test.dat”, ios:in);B. fstream myFile (“test.dat”, ios:C. ifstream myFile; myFile.open(“test.dat”, ios:D. 以上都正确20. read函数的功能是从输入流
11、中读取( )。 DA一个字符 B. 当前字符 C. 一行字符 D. 指定若干字节试题二、程序填空题(每空1 分,共20 分)。1.【程序说明】以下程序能实现求a2+b2+c2 。其中a、b、c 的值由对象的初始化值提供。该程序使用静态成员实现。运行结果:Number=5Number=10Number=15Result=350class myclass myclass(int x); void getnumber(); static void Result(); (1) ; /定义静态数据成员summyclass:myclass(int x) a=x; (2) ;void myclass:getnumber() coutNumber=aendl; Result() Result=sum (3) ;int main() myclas