第二章:
第一节:
5、下列关于数据成员的描述中,错误的是_____
A、数据成员的的类型只能是基本数据类型
B、数据成员用于保存数据
C、类中的数据成员之间不能重名
D、类的数据成员也被称作属性
7、对于类中定义的成员,其隐含访问权限为_____
A、protected
B、public
C、static
D、private
10、____是不可以作为该类的数据成员的。
A、另一个类的对象
B、自身类对象的引用
C、自身类的对象
D、自身类对象的指针
第二节:
5、类和对象实现面向对象程序设计的▁▁▁▁▁和▁▁▁▁▁特性。
答案:ADC 封装和抽象
第三章:
第一节:
5、已定义类ABC_____。
class ABC {private:int x, y;public:ABC(int a, int b) {x = a;y = b;}};
则下列定义对象语句中,错误的是_____。
A、ABC obj;
B、ABC obj(5, 10);
C、ABC *pobj = new ABC(5, 10);
D、ABC obj(5, 5+5);
第二节:
3、一个类可包含析构函数的个数是_____。
A、至少一个
B、0个或多个
C、1个
D、多个
7、关于new运算符的下列描述中,_____是错误的
A、使用它创建对象时要调用构造函数
B、使用它创建的对象或对象数组必须使用运算符delete删除
C、使用它创建对象数组时必须指定初始值
D、它可以用来动态创建对象和对象数组
第三节:
5、请根据要求把程序补充完整
#include <iostream>using namespace std;class A {int a,b;public:A(int x=0,int y=0) {a=x;b=y;}A( ▁▁▁▁▁ ) {// 完成拷贝功能的构造函数a=t.a; // 第一个成员等于参数的第一个成员b=t.a+t.b▁▁▁▁▁; // 第二个成员等于参数的两个成员之和}void Set(int,int);void Print( );};void A::Set(intx,inty) {a=x;b=y;}void A::Print( ) {cout<<a<<'\t'<<b<<'\n';}
第四节:
1、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是▁▁▁▁▁。 Sample a[2], *q, *p = new Sample;
答案:ACC constA&t b=t.a+t.b 3次
第四、五章:
第一节:
4、下列关于静态成员的描述中,错误的是_____。
A、静态数据成员不属于某个对象,是类的共享成员
B、私有静态成员具有块作用域
C、静态数据成员要在类外定义和初始化
D、公有静态成员具有文件作用域
5、在类中声明一个常函数成员fun,下列_____语句是正确的
A、void fun( ) const;
B、void fun( );
C、const void fun( );
D、void const fun( );
6、下列静态数据成员的特性中,_____是错误的
A、静态数据成员在类体外进行初始化
B、静态数据成员初始化时,要在静态数据成员名前加类名和作用域运算符
C、静态数据成员不是所有对象所共享的成员
D、说明静态数据成员时前边要加关键字static来修饰
8、下面有关静态成员函数的描述中,正确的是_____。
A、在建立对象前,就可以为静态数据成员赋值
B、静态成员函数在类外定义是,要用static前缀
C、静态成员函数只能在类外定义
D、在静态成员函数中可以使用this指针
第二节:
1、下面有关友元函数的描述中,正确的说法是_____。
A、在类的外部定义友元函数时必须加上friend关键字
B、一个友元函数不可以同时定义为两个类的友元函数
C、友元函数是独立于当前类的外部函数
D、友元是本类的成员函数
5、如果在主函数main()中有函数调用Point::func();则函数func()是类Point的_____。
A、私有静态成员函数
B、公有静态成员函数
C、公有非静态成员函数
D、友元函数
第三节:
9、通过运算符重载,可以定义新的运算符。错
第四节:
4、下列程序的运行结果为▁▁▁▁▁
#include <iostream>#include <cstring>using namespace std;class Toy {char name[10];static int count;public:Toy(char* _n) {strcpy(name, _n);count++;}~Toy( ) {count--;}char* GetName( ) {return name;}static int getCount( ) {return count;}};int Toy::count=0;int main( ) {Toy t1("Snoopy"), t2("Mickey"), t3("Barbie");cout<<t1.getCount( )<<endl;return 0;}
5、下列程序的运行结果为▁▁▁▁▁,12行对公有静态数据成员的调用obj.a,可改写为▁▁▁▁▁
#include<iostream>using namespace std;class A{public:static int a;void init(){a=1;}A(int a=2){init();a++;}};int A::a=0;A obj;int main(){cout<<obj.a;return 0;}
第五节:
答案:BACACB 3 1 A::a
第六章:
第一节:
2、下列关于派生类的叙述中,错误的是_____。
A、基类成员被派生类继承以后访问权限保持不变
B、派生类至少要有一个基类
C、派生类中包括了从基类继承的成员
D、一个派生类可以作为另一个派生类的基类
3、下列关于派生类和基类的描述中,正确的是_____。
A、派生类对基类的默认继承方式是公有继承
B、派生类成员函数可以访问基类的所有成员
C、派生类成员函数只能访问基类的公有和保护成员
D、派生类成员函数只能访问基类的公有成员
4、下列关于虚基类的描述中,错误的是___b__。
A、使用虚基类可以消除由多继承产生的二义性
B、声明“class B : virtual public A”说明类B为虚基类
C、建立派生类对象时,首先调用虚基类的构造函数
D、构造派生类对象时,虚基类的构造函数只被调用一次
8、在面向对象程序设计中,实现信息隐蔽是靠_____。
A、对象的继承
B、对象的间接访问
C、对象的分类
D、对象的封装
答案:ACAD
第二节:
2、请按下面注释的提示,在横线处填入适当的内容将类B的构造函数定义补充完整。
class A {int a;public:A(int aa=0) {a=aa;}};class B: public A {int b;A c;public://用aa初始化基类A,用aa+1初始化类对象成员c?B(int aa):▁▁▁▁▁ { b=aa+2; }};
3、下列程序的输出结果是▁▁▁▁▁
#include <iostream>using namespace std;class Base {public:void print ( ) {cout << "Base";}};class Derived : public Base {public:void print ( ) {cout << "Deri";}};int main( ) {Derived * pd = new Derived( );Base * pb = pd;pb->print( );pd->print( );delete pd;return 0;}
4、有如下类声明,则类MyDERIVED中受保护的成员的个数是▁▁▁▁▁。
class MyBASE {private:int k;protected:int x;public:void set(int m,int n) {k=m;x=n;}int get( )const {return k;}};class MyDERIVED: protected MyBASE {protected:int j;public:void set(int m, int n,int p) {MyBASE::set(m,n);j=p;}int get( ) const {return MyBASE::get( )+j;}};
7、下列程序的输出结果是▁▁▁▁▁
#include <iostream>using namespace std;class A {protected:int n;public:A(int x=5) {n=++x;}void show() {cout<<"A::" <<n;}};class B:public A {protected:int n;public:B(int x=3) {n=x*x;}void show() {cout<<"B::" <<n;}};int main() {B b;A *p=&b;p->show();return 0;}
答案:A(aa),C(aa+1) BaseDeri 4 A::6
第三节:
1、假设ClassY:publicX,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,构造函数和析构函数的执行次序分别为_____。
A、X, Y, Y, X
B、X, Y, X, Y
C、Y, X, X, Y
D、Y, X, Y, X
2、多重继承的构造顺序可分为如下四步,这四个步骤的正确顺序是_____。 (1)所有非虚基类的构造函数按照他们被继承的顺序构造 (2)所有虚基类的构造函数按照他们被继承的顺序构造 (3)所有子对象的构造函数按照他们被继承的顺序构造 (4)派生类自己的构造函数体
A、(2)(4)(3)(1)
B、(4)(3)(2)(1)
C、(2)(1)(3)(4)
D、(3)(4)(1)(2)
5、对于下面的类:
class X {int a;public:X(int x=0) {a=x;}};class Y: public X {int b;public:Y(int x=0,int y=0): X(y) {b=x;}};
下列语句组中出现语法错误的是____。
A、X *pa=new Y(1,2);
B、Y b1(2,3); X &pa1=b1;
C、Y b1(2,3); X *pa1=&b1;
D、X a2(10); Y b2=a2;
6、以下有关继承的叙述不正确的是____。
A、继承可以实现软件复用
B、虚基类可以解决多继承产生的二义性问题
C、派生类不继承基类的私有成员
D、派生类的构造函数要调用基类的构造函数
答案:ACDC
第四节:
第七章:
第一节:
1、下列哪种C++语法形式不属于多态__d___。
A、对象多态
B、重载运算符
C、重载函数
D、不同函数中定义的同名局部变量
5、关于基类中的虚函数与一般成员函数,正确的是_____。
A、虚函数只能定义一个,而一般成员函数可以多个
B、虚函数与一般成员函数在基类中没什么区别
C、虚函数不能定义函数体,而一般成员函数可以
D、虚函数不能被调用,而一般成员函数可以
7、对虚函数的调用_____。
A、一定使用动态联编
B、必须使用动态联编
C、一定使用静态联编
D、不一定使用动态联编
8、对虚函数使用基类指针或引用,系统使用_____,对虚函数使用对象名调用时,系统使用_____联编。
A、静态联编、静态联编
B、动态联编、动态联编
C、静态联编、动态联编
D、动态联编、静态联编
第三节:
2、对于如下类定义,以下正确的叙述是_____。
class A{public:virtual void funcl(){}void func2(){}};class B:public A{public:void func1(){cout<<”class Bfunc1”<<endl;}virtual void func2(){cout<<”class B func2”<<endl;}};
A、B::func1()是虚函数,A::func2()不是虚函数
B、A::func2()和B::func1()都不是虚函数
C、B::func1()不是虚函数,A::func2()是虚函数
D、A::func2()和B::func1()都是虚函数
8、根据以下要求,填写程序代码使程序能够运行(注:所有标点符号均为英文状态,且符号间无空格) (1)▁▁▁▁▁ 填写完程序后,执行该程序的运行结果为▁▁▁▁▁
#include <iostream>using namespace std;class Point {double x,y;public:Point(double X,double Y) {x=X;y=Y;}double Area()const{return 0.0;}};class Rectangle:public Point {double w,h;public:Rectangle(double X,double Y,double W,double H);//类内声明double Area()const{return w*h;}};//类外定义Rectangle类的构造函数//使用参数初始化列表,实现形参X和Y初始化基类数据成员,W和H初始化派生类新增数据成员__(1)___{ }void fun(Point &s){cout<<"Area="<<s.Area();}int main( ) {Rectangle rec(3.0,5.0,15.0,25.0);fun(rec);// Areturn 0;}
9、若将第8题中,fun函数头部改为fun(Point *p),则其函数体内的语句因改写为▁▁▁▁▁ 此时,主函数中对fun函数的调用的语句因改写为▁▁▁▁▁
答案:BBDDD
8、Rectangle::Rectangle(double X, double Y, double W, double H) : Point(X, Y), w(W), h(H) Area=0 9、cout<<"Area="<<p->Area(); fun(&rec);










