};
20、在类的定义形式中,数据成员、成员函数和( )组成了类定义体。 A、成员的访问控制信息 B、公有消息 C、私有消息 D、保护消息
二、填空题
1. 通常的拷贝初始化构造函数的参数是_________________ 2. 在C++中函数参数的传递方式有三种,分别是:__________、__________和__________。 3. 任何类中允许有三种访问权限的数据,这三种访问权限分别是__________、__________
和__________。
4. 类中数据成员和成员函数的默认类型为______________
5. 在类内部定义的__________和__________数据不能被不属于该类的成员函数来存取,定
义为__________的数据,可以在类外部进行存取。
6. __________是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员
进行初始化并执行对象的其他内部管理操作。 7. 一个类中有__________个析构函数。
8. __________成员函数中不能直接引用类中说明的非静态成员。 9. 已知类Sample 中的一个成员函数说明如下:
void Set(Sample &a);
其中,Sample &a的含意是_________________
10.静态数据成员属于类,可以使用_______________ 的方式访问静态的数据成员。 11.编译程序将this指针指向_____________。 12.以下程序的执行结果是__________。
# include
Sample () { cout << “constructore” << endl; } };
void fn (int i)
{ static Sample c;
cout << “i=” << i << endl; }
void main () { fn (10) ; fn (20) ; }
13. 以下程序的执行结果是_______________。
# include
static int k;
6
public:
sample(int i) { n=i; k++; }; void disp(); };
void sample:: disp ()
{ cout<<\int sample:: k=0; void main ()
{ sample a(10), b(20), c(30) ; a.disp() ; b.disp(); c.disp(); }
14.以下程序的执行结果是_______________
# include
void setx( int i ) { x=i; } int putx( ) { return x; } };
void main ( )
{ sample *p;
sample A [3]; A[0].setx(5); A[1].setx(6); A[2].setx(7);
for (int j=0 ; j<3; j++ ) { p= &A [j] ;
cout<
}
cout< 15.以下程序的执行结果是_______________ #include 7 }; main( ) { A a; B b; return 0; } 第四章 派生类与继承 一、选择 1、 从一个基类派生出的各个类的对象之间 (1) 。 A、共享所有数据成员,每个对象还包含基类的所有属性 B、共享部分数据成员,每个对象还包含基类的所有属性 C、不共享任何数据成员,但每个对象还包含基类的所有属性 D、共享部分数据成员和成员函数 2、 C++的继承性允许派生类继承基类的 (2) 。 A、部分特性,并允许增加新的特性或重定义基类的特性 B、部分特性,但不允许增加新的特性或重定义基类的特性 C、所有特性,并允许增加新的特性或重定义基类的特性 D、所有特性,但不允许增加新的特性或重定义基类的特性 3、 对于公有继承,基类的公有和保护成员在派生类中将 (3) 成员。 A、全部变成公有 B、全部变成保护 C、全部变成私有 D、仍然相应保持为公有和保护 4、建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为 (4) 的构造函数。 A、自己所属类、对象成员所属类、基类 B、对象成员所属类、基类、自己所属类 C、基类、对象成员所属类、自己所属类 D、基类、自己所属类、对象成员所属类 5、派生类的对象对其基类中 (5) 可直接访问。 A、公有继承的公有成员 B、公有继承的私有成员 C、公有继承的保护成员 D、私有继承的以有成员 6、设类B是基类A的派生类,并有语句:A aa, * pa=&aa; B bb, * pb=&bb; 则正确 的语句是___(6)__ 。 A、pb=pa; B、bb=aa; C、aa=bb; D、*pb=*pa; 7、在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 _ (7)__. A、派生类的对象可以赋给基类的对象 B、派生类的对象可以初始化基类的引用 C、派生类的对象可以直接访问基类中的成员 D、派生类的对象的地址可以赋给指向基类的指针 8、若类X和类Y的定义如下: class X { int a,b; public: void fx ( ); 8 }; class Y: public X { int c; public: void fy ( ); }; void Y::fy ( ) { c=a*b; } 则上述代码中, (8) 是非法的语句。 A、void fx(); B、k=a*b; C、void fy(); D、int c; 9、如果一个派生类的基类不止一个,则这种继承称为__(9)__。 A、单继承 B、虚继承 C、多态继承 D、多重继承 10.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: (10) 。 A、 AB operator+(AB & a , AB & b) B、 AB operator+(AB & a) C、 operator+(AB a) D、 AB & operator+( ) 11、下面叙述不正确的是 (11) 。 A、派生类可以使用private派生 B、基类的public成员在派生类中仍然是public C、对基类成员的访问必须是无二义性的 D、赋值兼容原则也适合多重继承的组合 12、下面叙述不正确的是 (12) 。 A、基类的protected成员在派生类中仍然是protected B、基类的protected成员在public派生类中仍然是protected C、基类的protected成员在private派生类中仍然是private D、对基类成员的访问必须是无二义性的 13、下面叙述不正确的是 (13) 。 A、成员的访问能力在private派生类中和public派生类中仍是不同的 B、基类的private成员在public派生类中不可访问 C、赋值兼容规则不适合于多重继承的组合 D、public基类成员在protected派生中是protected 14、下面叙述正确的是 (14) 。 A、基类的对象可以赋给派生类 B、只要是基类的对象,都可以赋给由它派生的任一个派生类对象 C、只有该基类直接派生出来的类的对象才可以赋给该基类的对象 D、公有派生类的对象可以赋给基类的对象 15以下程序的输出结果为是 (15) 。 #include class B:virtual public A{}; class C:virtual public A{}; class D:public B,public C { int getn(){return B::n;} }; 9 void main() { D d; d.B::n=10; d.C::n=20; cout< A、10,20 B、20,20 C、10,10 D、输出有二义性,不确定 二、填空题 1、在C++中派生类时,可以有 (1) 、 (2) 和 (3) 三种不同的方式。 2、公有派生类不能访问基类的 (4) 成员,但是派生类可以访问基类的 (5) 成员和 (6) 成员。 3、构造函数不能被继承,因此,派生类的构造函数必须通过调用 (7)构造函数进行初始化基类的对象。 4、保护派生具有双重作用:对 (8) ,具有公有性,对其他外部,具有(9) 。 5、在多重派生中,要使公共基类在派生类中只有一个拷贝,必须将该基类说明为 (10) 。 第五章 多态性 一、单选题 1、 下列运算符中,______运算符在C++中不能重载。 A、 ? : B、+ C、— D、<= 2、 下列运算符中,______运算符在C++中不能重载。 A、> B、[ ] C、 :: D、<< 3、 在C++中,通常重载运算符的成员函数称为______。 A、运算符函数 B、重载函数 C、函数重载运算符 D、以上都不对 4、 下列函数中,______不能重载。 A、成员函数 B、非成员函数 C、析构函数 D、构造函数 5、 系统在调用重载函数时,往往根据一些条件确定哪个重载函数被调用,在下列选项中, 不能作为依据的是______。 A、参数的个数 B、参数的类型 C、参数的顺序 D、函数的类型 6、 下列对重载函数的描述中,______是错误的。 A、重载函数中不允许使用默认参数 B、重载函数中编译是根据参数表进行选择的 C、一般情况下,不要使用重载函数来描述毫无相干的函数 D、构造函数重载将会给初始化带来多种方式 7、 下列关于运算符重载的描述中,______是正确的。 A、运算符重载可以改变运算符的个数 B、运算符重载可以改变优先级 C、运算符重载可以改变结合性 D、运算符重载不可以改变语法结构 8、要实现动态联编,派生类中的虚函数______。 A、参数个数必须与函数的原型相同,参数类型可以与函数的原型不同 B、参数类型必须与函数的原型相同,返回类型可以与函数的原型不同 C、参数个数、类型和顺序必须与函数的原型相同,返回类型必须与函数的原型相同 10