Sample(int i,int j){x=i;y=j;} void copy(Sample &s);
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<\ };
void Sample::copy(Sample &s) {
x=s.x;y=s.y; }
void func(Sample s1,Sample &s2) {
s1.setxy(10,20); s2.setxy(30,40); }
void main() {
Sample p(1,2),q; q.copy(p); func(p,q); p.print(); q.print(); }
4、分析以下程序的执行结果
#include
public: int x; int y;
void disp() {
cout<<\ } };
void main() {
int Sample::*pc; Sample s;
pc=&Sample::x; s.*pc=10;
pc=&Sample::y; s.*pc=20; s.disp();
}
5、写出下面程序的执行结果
#include
int A;
static int B; public:
Sample(int a){A=a,B+=a;} static void func(Sample s); };
void Sample::func(Sample s) {
cout<<\ }
int Sample::B=0; void main() {
Sample s1(2),s2(5); Sample::func(s1); Sample::func(s2); }
第4章 继承与组合
一、选择题
1、下面对派生类的描述中,错误的是( )。 A 一个派生类可以作为另一个派生类的基类 B 派生类至少有一个基类
C 派生类的成员除了它自己的成员外,还包含了它的基类的成员 D 派生类中继承的基类成员的访问权限到派生类中保持不变
2、在多继承中,公用继承和私有继承对于基类成员在派生类中的可访问性与单继承的规则是( )。
A 完全相同 B 完全不同 C 部分相同,部分不同 D 以上都不对 3、下面叙述不正确的是( )。 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 重复性 D 多样性
9、在公用继承情况下,有关派生类对象和基类对象的关系,不正确的叙述是( )。 A 派生类的对象可以赋给基类的对象 B 派生类的对象可以初始化基类的引用 C 派生类的对象可以直接访问基类中的成员 D 派生类的对象的地址可以赋给指向基类的指针 10、有如下类定义:
class MyBASE {public:
void set(int n) { k=n ;} int get()const{ return k ;} protected: int k; } ;
class MyDERIVDE: protected MyBASE{ public:
void set(int m. int n) { MyBASE::set(m); j=n;} int get()const{ return MyBASE::get()+j;} protected: int j ; };
则类MyDERIVDE中保护的数据成员和成员函数的个数是( )。 A 4 B 3 C 2 D 1 11、有如下程序:
#include
A( ) { cout << “A” ; } };
class B { public :
B( ) { cout << “B” ; } };
class C : public A { public :
C( ) { cout << “C ”; } private: B b ; };
int main ( ) {
C obj ; return 0 ; }
执行后的输出结果是( )。
A CBA B BAC C ACB D ABC 12、有如下程序:
#include
~BASE( ) { cout<<”BASE” ;} };
class DERIVED : public BASE { public :
~ DERIVED( ) { cout<<” DERIVED” ; } };
int main ( ) { DERIVED X; return 0 ; }
执行后的输出结果是( )。
A BASE B DERIVED C BASE DERIVED D DERIVEDBASE 13、有如下程序:
#includ
void fun ( ){ cont<<”Base::fun”< class Derived : public Base { public: void fun( ) { cout<<”Derivde::fun”< 已知其执行后的输出结果为: Base::fun Derived::fun 则程序中下划线处应添入的语句是( )。 A Base.fun(); B Base::fun(); C Base->fun() D fun(); 二、填空题 1、在C++中,三种继承方式的说明符号为 、 、 ,如果不加说明,则默认的继承方式为 。 2、当公用继承时,基类的公用成员成为派生类的 ;保护成员成为派生类的 ;私有成员成为派生类的 。 3、当保护继承时,基类的公用成员成为派生类的 ;保护成员成为派生类的 ;私有成员成为派生类的 。 4、当私有继承时,基类的公用成员成为派生类的 ;保护成员成为派生类的 ;私有成员成为派生类的 。 5、多继承时,多个基类中同名成员在派生类中由于标识符不唯一而出现 。 第5章 多态性与虚函数 一、选择题 1、向不同的对象发送统一消息可导致完全不同的行为的现象称为( )。 A 多态性 B 抽象 C 继承 D 封装 2、多态调用是指( )。 A 以任何方式调用一个虚函数 B 以任何方式调用一个纯虚函数 C 借助于指向对象的基类指针或引用调用一个虚函数 D 借助于指向对象的基类指针或引用调用一个纯虚函数 3、下面关于抽象类说法不正确的是( )。 A 抽象类是指具有纯虚函数的类 B 一个声明有纯虚函数的基类一定是抽象类 C 可以用抽象类定义对象 D 抽象类中可以进行构造函数的重载 4、在C++中,用于实现运行时多态性的是( )。 A 内联函数 B 重载函数 C 模板函数 D 虚函数 5、关于纯虚函数,下列表述正确的是( )。 A 纯虚函数是未给出实现版本(即无函数体定义)的虚函数 B 纯虚函数的声明总是以“=0”结束 C 派生类必须实现基类的纯虚函数 D 含有纯虚函数的类一定是派生类 6、关于虚函数,下列表述正确的是( )。