继承和派生习题
继承与派生练习题
![继承与派生练习题](https://img.taocdn.com/s3/m/4fb10380a58da0116c1749fd.png)
习题八第八章继承与派生1.下列对派生类的描述中,(D.派生类中继承的基类成员的访问权限到派生类保持不变)是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变2. 派生类的对象对它的哪一类基类成员是可以访问的?(A.公有继承的基类的公有成员)A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员3. 关于多继承二义性的描述,(D.派生类和它的基类中出现同名函数时,将可能出现二义性)是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限定D.派生类和它的基类中出现同名函数时,将可能出现二义性4. 多继承派生类构造函数构造对象时,(B.虚基类的构造函数)被最先调用。
A.派生类自己的构造函数B.虚基类的构造函数C.非虚基类的构造函数 D.派生类中子对象类的构造函数5. C++类体系中,能被派生类继承的是( B.虚函数)。
A.构造函数 B.虚函数 C.析构函数 D.友元函数6. 设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员(A. 私有继承)A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7. 指出下列对定义重载函数的要求中,哪些是错误的提法。
A.要求参数的个数不同B. 要求参数中至少有一个类型不同。
A.要求参数的个数不同。
B.要求参数中至少有一个类型不同。
C.不要求函数的返回值不同。
继承与派生习题
![继承与派生习题](https://img.taocdn.com/s3/m/42d56bd308a1284ac8504313.png)
一、选择填空1.下列对派生类的描述中,()是错的。
A.一个派生类可以作另一个派生类的基类;B.派生类至少有一个基类;C.派生类的成员除了它自己的成员外,还包含了它的基类的成员;D.派生类中继承的基类成员的访问权限到派生类保持不变。
2.派生类的对象对它的基类成员中()是可以访问的。
A.公有继承的公有成员;B.公有继承的私有成员;C.公有继承的保护成员;D.私有继承的公有成员。
3.派生类的构造函数的成员初始化列表中,不能包含()。
A.基类的构造函数;B.派生类中对象成员的初始化;C.基类的对象成员的初始化;D.派生类中一般数据成员的初始化。
4.设置虚基类的目的是()A.简化程序;B.消除二义性;C.提高运行效率D.减少目标代码5. C++类体系中,能被派生类继承的是()。
A.构造函数B.虚函数C.析构函数D.友元函数6.设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7. 设有如下程序:#include<iostream.h>class A{ public: int i;display() { cout<<”class A\n”; }};class B{public: int i;display() { cout<<”cla ss B\n”; }};class C: public: A, public B{ int j;public:int i;show(){j=i*i; display();}};void main(){C demo;demo.show();}主程序运行时将( )A. 因变量i的重复定义而报错B. 因对象demo间接调用display函数时产生歧义性而报错C. 因类定义的语法错而不能运行D. 没有语法错,正常输出结果8 若要用派生类的对象访问基类的保护成员,以下观点正确的是( )A.不可能实现B.可采用保护继承C.可采用私有继承D.可采用公有继承二.填空题1.派生类可以定义其_______________中不具备的数据和操作。
继承和派生习题
![继承和派生习题](https://img.taocdn.com/s3/m/6f4cdfc26294dd88d0d26bcd.png)
继承和派生习题一、单选题1.若类A和类B的定义如下:class A{int i,j;public:int geti(){return i;}};class B: public A{int k;public:void make(){k=i*j;}};则上述中,()是非法的表达式。
A.k=i*j B.int k; C.return i; D.void make();2.关于公有继承,下列说法错误的是()。
A.基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。
B.派生类的其他成员可以直接访问基类的公有成员和保护成员。
C.派生类的对象可以访问基类的私有成员。
D.派生类成员和对象都无法访问基类的私有成员。
3.下列说法中错误的是()。
A.公有继承时基类中的public成员在派生类中仍是public的;B.公有继承时基类中的private成员在派生类中仍是private的;C.私有继承时基类中的public成员在派生类中是private的;D.保护继承时基类中的public成员在派生类中是protected的;4.在公有继承中,基类中的公有成员作为派生类的()。
A.公有成员B.私有成员C.保护成员D.私有成员函数5.基类中的()不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。
A.公有成员B.私有成员C.保护成员D.私有成员函数6.在下面的表达式中,不表示虚继承的是()。
A.virtual publicB.public virtualC.publicD.virtual7.设置虚函数的声明中,正确的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码8.下面叙述错误的是()。
A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问9.派生类的对象对它的基类成员中()是可以访问的。
继承与派生习题
![继承与派生习题](https://img.taocdn.com/s3/m/ad60b901581b6bd97f19ea96.png)
C++讲义-第九章习题一.选择题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.C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。
继承与派生
![继承与派生](https://img.taocdn.com/s3/m/0c3fae2a192e45361066f524.png)
继承与派生一、选择填空。
1、下列对派生类的描述中,()是错的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D。
2、派生类的对象对它的基类中()是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员答案:A。
3、对基类和派生类的关系描述中,()是错的。
A、派生类是基类的具体化B.派生类是基类的子集C.派生类是基类定义的延续、D.派生类是基类的组合答案:B。
4、派生类的构造函数的成员函数初始值表中,不能包含()。
A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化D.派生类中一般数据成员的初始化答案:C。
5、关于子类型的描述中,()是错的。
A.子类型就是指派生类是基类的子类型B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型C.在公有继承下,派生类是基类的子类型D.子类型关系是不可逆的答案:A。
6、关于多继承二义性的描述中,()是错的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性B.解决二义性的最常用的方法是对成员名的限定法C.基类和派生类中同时出现的同名函数,也存在二义性问题D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性答案:C。
7、设置虚基类的目的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码答案:B。
8、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化()。
A.与虚基类下面的派生类个数有关B.多次C.二次D.一次答案:D。
二、判断下列描述的正确性,对者划∨,错者划×∨1.C++语言中,既允许单继承,有允许多继承。
继承与派生习题
![继承与派生习题](https://img.taocdn.com/s3/m/607bf4acdd3383c4bb4cd219.png)
1.概念填空题1.1在C++中,三种派生方式的说明符号为、、不加说明,则默认的派生方式为。
1.2当公有派生时,基类的公有成员成为派生类的;保护成员成为派生类的;私有成员成为派生类的。
当保护派生时,基类的公有成员成为派生类的;保护成员成为派生类的;私有成员成为派生类的。
1.3 派生类的构造函数一般有3项工作要完成:首先,其次,最后。
1.4多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现。
在派生类中采用或来消除该问题。
2.选择题2.1下面对派生类的描述中,错误的是()。
A.一个派生类可以作为另外一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变2.2下列对友元关系叙述正确的是()。
A.不能继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率2.3当保护继承时,基类的()在派生类中成为保护成员,不能通过派生类的对象来直接访问。
A.任何成员B.公有成员和保护成员C.公有成员和私有成员D.私有成员2.4在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是()。
A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针2.5有如下类定义:class MyBASE{int k;public:void set(int n) {k=n;}int get( ) const {return k;}};class MyDERIVED: protected MyBASE{protected;int j;public:void set(int m,int n){MyBASE::set(m);j=n;}int get( ) const{return MyBASE::get( )+j;}};则类MyDERIVED中保护成员个数是(B)。
继承与派生习题
![继承与派生习题](https://img.taocdn.com/s3/m/977122c6bcd126fff6050be7.png)
继承与派生习题C++讲义-第九章习题一.选择题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.多次第 1 页共 15 页C.二次 D.一次9.C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。
继承与派生
![继承与派生](https://img.taocdn.com/s3/m/533d31ef856a561252d36f25.png)
第7章——继承与派生一、选择题1.在c++中,类之间的继承关系具有( )。
(a) 自反性 (b) 对称性 (c) 传递性 (d) 反对称性2.下列关于类的继承描述中,( )是正确的。
(a) 派生类公有继承基类时,可以访问基类的所有数据成员,调用所有成员函数。
(b) 派生类也是基类,所以它们是等价的。
(c) 派生类对象不会建立基类的私有数据成员,所以不能访问基类的私有数据成员。
(d) 一个基类可以有多个派生类,一个派生类可以有多个基类。
3.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( )。
(a) public成员(b) private成员(c) protected成员(d) 友员4.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( )。
(a) public成员(b) private成员(c) protected成员(d) 友员5.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( )。
(a) public成员(b) private成员(c) protected成员(d)友员6.不论派生类以何种方式继承基类,都不能直接使用基类的()。
(a) public 成员(b) private成员(c) protected成员(d) 所有成员7.下面描述中,错误的是( )。
(a) 在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问。
(b) 在基类定义的protected成员在私有继承的派生类中可见。
(c) 在基类定义的公有静态成员在私有继承的派生类中可见。
(d) 访问声明可以在公有继承派生类中把基类的public成员声明为private成员。
8.在c++中,可以被派生类继承的函数是( = )。
(a) 成员函数(b)构造函数(c) 析构函数(d)友员函数9.在创建派生类对象时,构造函数的执行顺序是( = )。
(a) 对象成员构造函数—基类构造函数—派生类本身的构造函数(b) 派生类本身的构造函数—基类构造函数—对象成员构造函数(c) 基类构造函数—派生类本身的构造函数—对象成员构造函数(d) 基类构造函数—对象成员构造函数—派生类本身的构造函数10.当不同的类具有相同的间接基类时,( c )。
习题9-继承和派生
![习题9-继承和派生](https://img.taocdn.com/s3/m/b307a70990c69ec3d5bb75c3.png)
习题9 继承和派生一、单项选择题1、C++语言建立类族是通过()实现的。
A、类的嵌套B、虚函数C、类的继承D、抽象类2、继承具有(),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
A、规律性B、传递性C、重复性D、多样性3、下列对基类和派生类关系的描述中,错误的是()。
A、派生类是基类的具体化B、派生类是基类的子集C、派生类是基类定义的延续D、派生类是基类的组合4、下列对派生类的描述中,错误的是()。
A、一个派生类可以作为另一个派生类的基类B、派生类至少有一个基类C、派生类的缺省继承方式是privateD、派生类只继承了基类的公有成员和保护成员5、下列关于继承的描述中,错误的是()。
A、析构函数不能被继承B、派生类是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变6、派生类的对象对它的基类成员中()是可以访问的。
A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员7、下列说法中错误的是()。
A、公有继承时基类中的public成员在派生类中仍是public的B、公有继承时基类中的private成员在派生类中仍是private的C、私有继承时基类中的public成员在派生类中是private的D、保护继承时基类中的public成员在派生类中是protected的8、下面叙述错误的是()。
A、基类的protected成员在派生类中仍然是protected的B、基类的protected成员在public派生类中仍然是protected的C、基类的protected成员在private派生类中是private的D、基类的protected成员不能被派生类的对象访问9、下面叙述错误的是()。
A、对基类成员的访问能力在private派生类中和public派生类中是相同的B、基类的private成员在public派生类中不可访问C、基类中的public成员在protected派生类中是protected的D、基类中的public成员在protected派生类中仍然是public的10、C++体系中,不能被派生类继承的有()。
继承与派生练习题
![继承与派生练习题](https://img.taocdn.com/s3/m/9bf92e0752ea551810a687f5.png)
习题八第八章继承与派生1.下列对派生类的描述中,(D.派生类中继承的基类成员的访问权限到派生类保持不变)是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变2. 派生类的对象对它的哪一类基类成员是可以访问的?(A.公有继承的基类的公有成员)A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员3. 关于多继承二义性的描述,(D.派生类和它的基类中出现同名函数时,将可能出现二义性)是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限定D.派生类和它的基类中出现同名函数时,将可能出现二义性4. 多继承派生类构造函数构造对象时,(B.虚基类的构造函数)被最先调用。
A.派生类自己的构造函数B.虚基类的构造函数C.非虚基类的构造函数 D.派生类中子对象类的构造函数5. C++类体系中,能被派生类继承的是( B.虚函数)。
A.构造函数 B.虚函数 C.析构函数 D.友元函数6. 设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员(A. 私有继承)A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7. 指出下列对定义重载函数的要求中,哪些是错误的提法。
A.要求参数的个数不同B. 要求参数中至少有一个类型不同。
A.要求参数的个数不同。
B.要求参数中至少有一个类型不同。
C.不要求函数的返回值不同。
第3章-继承和派生习题
![第3章-继承和派生习题](https://img.taocdn.com/s3/m/11e01337998fcc22bdd10d9a.png)
《面向对象程序设计》习题班级:__________ 学号: ________ 姓名: _________ 名单序号:_______ 成绩:________第3章继承与派生一、选择题(共28分,每题1分)1 •下列对派生类的描述中,()是错误的。
A • 一个派生类可以作为另一个派生类的基类B •派生类至少有一个基类C •派生类的成员除了它自己的成员外,还包含了它的基类成员D •派生类中继承的基类成员的访问权限到派生类保持不变2•派生类的对象对它的哪一类基类成员是可以访问的?()A •公有继承的基类的公有成员 B.公有继承的基类的保护成员C.公有继承的基类的私有成员D.保护继承的基类的公有成员3 •关于多继承二义性的描述,()是错误的。
A •派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B •一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C •解决二义性最常用的方法是作用域运算符对成员进行限定D •派生类和它的基类中出现同名函数时,将可能出现二义性4 •多继承派生类构造函数构造对象时,()被最先调用。
A •派生类自己的构造函数B•虚基类的构造函数C•非虚基类的构造函数 D •派生类中子对象类的构造函数5 • C++类体系中,能被派生类继承的是()。
A. 构造函数B.虚函数C •析构函数 D •友元函数6 •设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员()A. 私有继承B.保护继承C.公有继承D.私有、保护、公有均可7 • C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A. 复用B.继承C.封装D.引用&继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
第3章继承和派生习题
![第3章继承和派生习题](https://img.taocdn.com/s3/m/007d8aaafc4ffe473368abce.png)
A.派生类自己的构造函数B.虚基类的构造函数
C.非虚基类的构造函数D.派生类中子对象类的构造函数
5.C++类体系中,能被派生类继承的是( )。
A.构造函数B.虚函数C.析构函数D.友元函数
6.设有基类定义:
class Cbase
{ private:inta;
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码
25.下列虚基类的声明中,正确的是()。
A.classvirtual B:public AB.virtual classB:publicA
C.class B:publicAvirtualD.class B:virtual public A
26.若要用派生类的对象访问基类的保护成员,以下观点正确的是()
第3章-继承和派生习题
———————————————————————————————— 作者:
———————————————————————————————— 日期:
《面向对象程序设计》习题
班级:学号:姓名:名单序号:成绩:
第3章继承与派生
一、选择题(共28分,每题1分)
1.下列对派生类的描述中,()是错误的。
19.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承C.封装D.引用
20.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性B.传递性C.重复性D.多样性
21.下列对继承的描述中,错误的是()。
3.关于多继承二义性的描述,()是错误的。
继承与派生习题
![继承与派生习题](https://img.taocdn.com/s3/m/e2d38c18a300a6c30c229fc5.png)
继承与派生习题集1、如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是( D )A)public和public B)public和protectedC)protected和public D)protected和protected解析:根据课本中定义,当派生类以protected方式继承基类时,则原基类的protected成员和public成员在派生类中的访问属性分别是protected和protected。
2、派生类的成员函数不能访问基类的( C )A)公有成员和保护成员B)公有成员C)私有成员D)保护成员解析:基类的私有成员无论以何种方式继承,在派生类中都是不可访问的。
3、在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是(C )A)派生类的对象可以赋给基类的对象B)派生类的对象可以初始化基类的引用C)派生类的对象可以直接访问基类中的成员D)派生类的对象的地址可以赋给指向基类的指针解析:基类与派生类对象可以相互转换,(1)派生类对象可以向基类对象赋值;(2)派生类对象可以向基类对象的引用进行赋值或初始化;(3)派生类对象的地址可以赋给指向基类对象的指针变量;(4)如果函数的参数是基类对象或基类对象的引用,相应得实参可以用子类对象。
4、在一个派生类对象结束其生命周期时(A)A)先调用派生类的析构函数后再调用基类的析构函数B)先调用调用基类的析构函数后再调用派生类的析构函数C)如果基类没有定义析构函数,则只调用派生类的析构函数D)如果派生类没有定义析构函数,则只调用基类的析构函数解析:在派生类对象释放时,先执行派生类析构函数,再执行其基类析构函数。
5、在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承private。
已知有如下类定义:class Base{ protected:void fun() {} };class Derived:Base {};则Base类中的成员函数fun() ,在Derived类中的访问权限是(A)A)private B)public C)friend D)protected解析:由于是私有继承,则基类中的保护成员在私有派生类中的访问属性为私有。
继承与派生练习题
![继承与派生练习题](https://img.taocdn.com/s3/m/883cd23b53d380eb6294dd88d0d233d4b14e3f2e.png)
继承与派生练习题习题八第八章继承与派生1.下列对派生类的描述中,(D.派生类中继承的基类成员的访问权限到派生类保持不变)是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变2. 派生类的对象对它的哪一类基类成员是可以访问的?(A.公有继承的基类的公有成员)A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员3. 关于多继承二义性的描述,(D.派生类和它的基类中出现同名函数时,将可能出现二义性)是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限定D.派生类和它的基类中出现同名函数时,将可能出现二义性4. 多继承派生类构造函数构造对象时,(B.虚基类的构造函数)被最先调用。
A.派生类自己的构造函数B.虚基类的构造函数C.非虚基类的构造函数 D.派生类中子对象类的构造函数5. C++类体系中,能被派生类继承的是( B.虚函数)。
A.构造函数 B.虚函数 C.析构函数 D.友元函数6. 设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员(A. 私有继承)A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7. 指出下列对定义重载函数的要求中,哪些是错误的提法。
A.要求参数的个数不同B. 要求参数中至少有一个类型不同。
A.要求参数的个数不同。
B.要求参数中至少有一个类型不同。
C.不要求函数的返回值不同。
继承和派生习题
![继承和派生习题](https://img.taocdn.com/s3/m/6f4cdfc26294dd88d0d26bcd.png)
继承和派生习题一、单选题1.若类A和类B的定义如下:class A{int i,j;public:int geti(){return i;}};class B: public A{int k;public:void make(){k=i*j;}};则上述中,()是非法的表达式。
A.k=i*j B.int k; C.return i; D.void make();2.关于公有继承,下列说法错误的是()。
A.基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。
B.派生类的其他成员可以直接访问基类的公有成员和保护成员。
C.派生类的对象可以访问基类的私有成员。
D.派生类成员和对象都无法访问基类的私有成员。
3.下列说法中错误的是()。
A.公有继承时基类中的public成员在派生类中仍是public的;B.公有继承时基类中的private成员在派生类中仍是private的;C.私有继承时基类中的public成员在派生类中是private的;D.保护继承时基类中的public成员在派生类中是protected的;4.在公有继承中,基类中的公有成员作为派生类的()。
A.公有成员B.私有成员C.保护成员D.私有成员函数5.基类中的()不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。
A.公有成员B.私有成员C.保护成员D.私有成员函数6.在下面的表达式中,不表示虚继承的是()。
A.virtual publicB.public virtualC.publicD.virtual7.设置虚函数的声明中,正确的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码8.下面叙述错误的是()。
A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问9.派生类的对象对它的基类成员中()是可以访问的。
c++继承与派生习题
![c++继承与派生习题](https://img.taocdn.com/s3/m/8286ac2ba300a6c30d229f23.png)
};
class B {public:B( ) {cout<<”B”;} };
class C: public A{
B b;
public:
C( ) {cout<<”C”;}
};
int main( ) {C obj; return 0;}
执行后的输出结果是(
)。
A.CBA
B.Bቤተ መጻሕፍቲ ባይዱC
C.ACB
D.ABC
3.8 类 O 定义了私有函数 F1。P 和 Q 为 O 的派生类,定义为 class P: protected O{…}; class
3.10 有如下程序:
#include<iostream>
using namespace std;
class Base{
private:
void fun1( ) const {cout<<”fun1”;}
protected:
void fun2( ) const {cout<<”fun2”;}
public:
int get( ) const{return MyBASE::get( )+j;}
};
则类 MyDERIVED 中保护成员个数是( )。
A.4
B.3
C.2
D.1
3.7 程序如下:
#include<iostream>
using namespace std;
class A {
public:
A( ) {cout<<”A”;}
C.是一个类的成员函数与另一个类的关系
D.提高程序的运行效率
3.3 当保护继承时,基类的(
继承和派生测试题
![继承和派生测试题](https://img.taocdn.com/s3/m/906c4911cc7931b765ce1510.png)
继承和派生练习选择题单选题1.下列虚基类的声明中,正确的是()。
A. class virtual B:public AB. virtual class B:public AC. class B:public A virtualD. class B: virtual public A2.C++类体系中,不能被派生类继承的有()。
A. 构造函数B. 虚函数C. 静态成员函数D. 赋值操作函数3.下列说法错误的是()。
A. 公有继承的基类中的public成员在派生类中仍是public的B. 公有继承的基类中的private成员在派生类中仍是private的C. 私有继承的基类中的public成员在派生类中变成private的D. 保护继承的基类中的public成员在派生类中变成protected的4.下列对继承的描述中,错误的是()。
A. 析构函数不能被继承B. 派生类也是基类的组合C. 派生类的成员除了它自己的成员外,还包含了它的基类的成员D. 派生类中继承的基类成员的访问权限到派生类保持不变5.下列对基类和派生类关系的描述中,错误的是()。
A. 派生类是基类的具体化B. 派生类是基类的子集C. 派生类是基类定义的延续D. 派生类是基类的组合6.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A. 复用B. 继承C. 封装D. 引用7.C++类体系中,能被派生类继承的是()。
A. 构造函数B. 虚函数C. 析构函数D. 友元函数8.关于多继承二义性的描述,()是错误的。
A. 派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B. 一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C. 解决二义性最常用的方法是作用域运算符对成员进行限定D. 派生类和它的基类中出现同名函数时,将可能出现二义性9.下列对派生类的描述中,()是错误的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
继承和派生习题
1 分析以下程序的执行结果
#include<iostream.h>
class base
{
public:
base(){cout<<"constructing base class"<<endl;}
~base(){cout<<"destructing base class"<<endl; } };
class subs:public base
{
public:
subs(){cout<<"constructing sub class"<<endl;}
~subs(){cout<<"destructing sub class"<<endl;}
};
void main()
{
subs s;
}
解:
本题说明单继承情况下构造函数和析构函数的调用顺序。
这里base为基类,subs为派生类。
所以输出为:
constructing base class
constructing sub class
destructing sub class
destrcuting base class
注意:在单继承情况下,首先调用基类的构造函数,随后调用派生类的构造函数,析构函数的调用顺序则正好相反。
---------------------------------------------------
2 分析以下程序的执行结果:
#include<iostream.h>
class base
{
int n;
public:
base(int a)
{
cout<<"constructing base class"<<endl;
n=a;
cout<<"n="<<n<<endl;
}
~base(){cout<<"destructing base class"<<endl;}
};
class subs:public base
{
base bobj;
int m;
public:
subs(int a,int b,int c):base(a),bobj(c)
{
cout<<"constructing sub cass"<<endl;
m=b;
cout<<"m="<<m<<endl;
}
~subs(){cout<<"destructing sub class"<<endl;}
};
void main()
{
subs s(1,2,3);
}
解:
本题说明派生类中含有对象成员情况下构造函数和析构函数的调用顺序。
这里base为基类,subs为派生类,subs类的构造函数中含有对象成员。
所以输出为:
constrcuting base class
n=1
constructing base class
n=3
constructing sub class
m=2
destructing sub class
destructing base class
destructing base class
注意:当派生类中含有对象成员时,构造函数的调用顺序如下:
1)基类的构造函数
2)对象成员的构造函数
3)派生类的构造函数
析构函数的调用顺序与之相反
-------------------------------------------------
3 分析以下程序的执行结果
#include<iostream.h>
class A
{
public:
int n;
};
class B:public A{};
class C:public A{};
class D:public B,public C
{
int getn(){return B::n;}
};
void main()
{
D d;
d.B::n=10;
d.C::n=20;
cout<<d.B::n<<","<<d.C::n<<endl;
}
解:
D类是从类和类派生的而类和类又都是从类派生的,但各有自己的副本。
所以对于对象d,d.B::n与d.C::n是两个不同的数据成员它们互无联系。
所以输出为:
10,20
--------------------------------------------
4 分析以下程序的执行结果
#include<iostream.h>
class A
{
public:
int n;
};
class B:virtual public A{};
class C:virtual public A{};
class D:public B,public C
{
int getn(){return B::n;}
};
void main()
{
D d;
d.B::n=10;
d.C::n=20;
cout<<d.B::n<<","<<d.C::n<<endl;
}
解:
D类是从类和类派生的而类和类又都是从类派生,但这是虚继承关系即是虚基类因此和共用一个的副本所以对于对象d,d.B::n与d.C::n是一个成员。
所以输出为:
20,20
---------------------------------------
5 假设图书馆的图书包含书名、编号作者属性读者饮包含姓名和借书证属性每位读者最多可借5本书,编写程序列出某读者的借书情况。
解:
设计一个类,从它派生出书类book和读者类reader,在reader类中有一个rentbook()成员函数用于借阅图书。
程序代码如下:
本程序的执行结果如下:
#include<iostream.h>
#include<string.h>
class object
{
char name[20];
int no;
public:
object(){}
object(char na[],int n)
{
strcpy(name,na);no=n;
}
void show()
{
cout<<name<<"("<<no<<")";
}
};
class book:public object
{
char author[10];
public:
book(){}
book(char na[],int n,char auth[]):object(na,n)
{
strcpy(author,auth);
}
void showbook()
{
show();
cout<<"作者:"<<author;
}
};
class reader:public object
{
book rent[5];
int top;
public:
reader(char na[],int n):object(na,n){top=0;}
void rentbook(book &b)
{
rent[top]=b;
top++;
}
void showreader()
{
cout<<"读者:";show();
cout<<endl<<"所借图书:"<<endl;
for(int i=0;i<top;i++)
{
cout<<" "<<i+1<<":"; // 5个空格
rent[i].show();
cout<<endl;
}
}
};
void main()
{
book b1("C语言",100,"谭浩强"),b2("数据结构",110,"严蔚敏");
reader r1("王华",1234);
r1.rentbook(b1);
r1.rentbook(b2);
r1.showreader();
}
读者王华(1234)
所借图书:
1:C语言(100)
2:数据结构(110)。