c++实验8 继承与派生上机练习题
继承与派生练习题

习题八第八章继承与派生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.不要求函数的返回值不同。
国家二级C++机试(继承和派生)模拟试卷8(题后含答案及解析)

国家二级C++机试(继承和派生)模拟试卷8(题后含答案及解析) 题型有:1. 选择题选择题1.有如下类定义:class AA{ int a:public:AA(intn=0):a(n){} };class BB:public AA{ public:BB(int n)____ };其中横线处缺失部分是( )。
A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;}正确答案:B解析:根据派生类构造函数的一般格式:<派生类名>(<总参数表>):<基类名1>(<参数表1>),…<基类名n><参数表n>),<成员对象名1>(<参数表n+1>),<成员对象名m>(<参数表n+m>)<派生类构造函数体>。
在派生类BB的构造函数总参数表后面应该接上基类名AA和其参数。
知识模块:继承和派生2.有如下程序:#inc1ude <iostream>using namespace std;class Basel{ public:Basel(int d) {cout<<d;} ~Basel( ){} };class Base2{ public:Base2(int d) {cout<<d;} ~Base2( ){} };class Derived:public Basel,Base2{ public:Derived (int a,int b,int c,int d);Basel(b),Base2(a),bl(d),b2(c) {} Private:int b1;int b2;};int main( ){ Derived d(1,2,3,4);retum 0;} 运行时的输出结果是( )。
A.1234B.2134C.12D.21正确答案:D解析:程序在创建派生类对象d时,分别调用基类Basel和Basel的构造函数。
知识模块:继承和派生3.已知基类Employee只有一个构造函数,其定义如下:Employee::Employee(int n):id(n){} Manager是Employee的派生类,则下列对Manager 的构造函数的定义中,正确的是( )。
C 第八章继承与派生习题习题解答

第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。
(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。
如果强制转换则要注意(6)。
答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。
公有派生可以使其类的(4),所以公有派生是主流。
答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。
继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。
答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.6 C++中多态性包括两种多态性:(1)和(2)。
前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。
答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.2简答题(以下习题题号可能和教材不一致!)8.2.1构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。
派生类构造函数各部分的执行次序是:1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。
2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。
3.派生类的构造函数体中的操作。
8.2.2什么叫派生类的同名覆盖(override)?答:如果派生类声明了一个和某个基类成员同名的新成员(当然如是成员函数,参数表也必须一样,否则是重载),派生类中的新成员就屏蔽了基类同名成员,类似函数中的局部变量屏蔽全局变量。
国家二级C%2b%2b机试(继承和派生)模拟试卷8.doc

国家二级C++机试(继承和派生)模拟试卷8控制面板籍卷1。
0满分分:全部题型1 .选择题翳29选择题? 题里:1.有如下类定义:答题120class AA(时分int a:限:钟public:AA(intn=0): a(n){}剩余时间:};r class BB: public AA{L I public:号:BB(int n)____1;12 14 16 18其中横线处缺失部分是()。
20 A. : a(n) ()B. : AA(n) (}调整背景: C. (a(n) ; }D- {a=n; }正确答案:B解析:根据派生类构造函数的一般格式:<派生类名〉(V总参数表〉):V基类名1>(V参数表1>),…V基类名n>V参数表n>) , V成员对象名1>(V参数表n+l>) , V成员对象名m>(V参数表n+m>)V派生类构造函数体>。
在派生类BB的构造函数总参数表后面应该接上基类名AA和其参数。
2.有如下程序:#includc <iostrcam> usingnamespace std;答题卡I A B C D 2A B C D 3 A B C D 4A B C D 5 A B C D 6A B C D 7A B C D 8A B C D 9A B C D 10 A B C DII A B C D 12A B C D 13A B C D 14A B C D 15A B C D 16A B C D 17A B C D 18A B C D 19A B C D 20A B C D21A B C24 A B C D25 A B C D 26 A B C D 27 A B C Dclass Basel { public :Basel(int d) (cout<<d ;) 〜Basel 。
{} };class Base2{ public :Base2(int d) {cout<<d ; } 〜Base2(){)};class Derived : public BaseL Base2{ public :Derived (int a, intb, intc, int d); Basel(b), Base2(a), bl(d), b2(c)() Private : int bl ; int b2;};int main()(Derived d(h 2, 3, 4); return 0; }运行时的输出结果是()。
C++(练习)第8章,继承与派生

C++(练习)第8章,继承与派生一,单选题1.下列描述中错误的是( )。
A 继承分为多重继承和单继承B 对象间通信靠传递消息实现C 在外面看不到对象的内部特征是基于对象的"模块独立性好"这个特征D 类是具有共同属性、共同方法的对象的集合参考答案C2. 设有以下定义:#includeclass A1{public:void show1() { cout<<"class A1"<<="">};class A2: public A1{public:void show2( ) { cout<<"class A2"<<="">};class A3: protected A2{public:void show3( ) { cout<<"class A3"<<="">};void main(){A1 obj1;A2 obj2;A3 obj3;...}以下不合法的调用语句是( )。
A obj1.show1();B obj2.show1();C obj3.show1();D obj2.show2();参考答案C3. 下列描述中哪个是正确的__________。
A 私有派生的子类无法访问父类的成员B 类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的C 私有派生类不能作为基类派生子类D 私有派生类的所有子孙类将无法继续继承该类的成员参考答案B4. 下面有关派生类的说法中,错误的是( )。
A 一个派生类可以作为另一个派生类的基类B 一个派生类可以有多个基类C 派生类构造函数可以将初始化参数值传递给基类的构造函数和对象成员的构造函数D 具有继承关系时,基类成员在派生类中的访问权限不变参考答案D5. 设置虚基类的目的是( )。
继承与派生

第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 )。
C++面向对象程序设计习题继承与派生

C++面向对象程序设计习题继承与派生继承与派生练习题1.什么是继承性?为什么说它是面向对象程序中的重要机制?所谓继承,就是从先辈处得到属性和行为特征。
2.C++中继承分为哪两个类?继承方式又分哪三种?基类和派生类public(公有)、private(私有)和protected(保护)继承3.三中继承方式中有哪些特点?不同基础更方式中派生类的对象对基类成员的访问有何不同?(1) 公有继承(public)方式:基类中的公有成员和保护成员在派生类中仍然是公有成员和保护成员,而基类的私有成员在派生类中不可访问。
(2) 保护继承(protected)方式:基类中的公有成员和保护成员在派生类中都变成保护成员,而基类的私有成员在派生类中不可访问。
(3) 私有继承(private)方式:基类中的公有成员和保护成员在派生类中都变成私有成员,而基类的私有成员在派生类中不可访问。
因此,无论哪种继承方式,基类中的私有成员在派生类中都不允许访问,基类中的公有成员和保护成员都可以被派生类中的成员直接访问。
派生类对象对基类成员的访问1. 保护继承在类定义中,在关键字protected下说明的成员称为保护成员。
保护成员既具有私有的特性又具有公有的特性。
2. 公有继承在公有继承方式下,基类中的公有成员和保护成员在派生类中仍然是公有成员和保护成员,因此,派生类的其它成员可以直接访问它们,但通过派生类的对象只能访问基类的公有成员,不能访问基类的保护成员和私有成员。
3. 私有继承在私有继承方式下,基类中的公有成员和保护成员在派生类中都变成私有成员,因此,派生类的其它成员可以直接访问它们,但通过派生类的对象不能访问基类的任何成员。
4.如何定义单继承的派生类?如何定义多继承的派生类?一个派生类只有一个直接基类,则该继承称为单一继承一个派生类有多个直接基类,则该继承称为多重继承5.派生类与基类之间有什么关系?在面向对象程序设计中,继承就是一个新类可以从现有类获得特征,从现有类产生新类的过程就是类的派生。
继承与派生练习题

习题八第八章继承与派生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.不要求函数的返回值不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.定义一个哺乳动物类Mammal,并从中派生出一个狗类Dog,下面给出Mammal类的定义,要求:(1)添加Dog类的颜色数据成员,访问属性为私有,通过SetColor和GetColor成员函数来对颜色进行设置和获取。
(2)分别为基类和派生类添加相应的构造函数(有参、无参)和析构函数,并进行测试。
class Mammal{protected:int itsAge;int itsWeight;public:int GetAge(){return itsAge;}void SetAge(int age) {itsAge=age;}int GetWeight() { return itsWeight;}void SetWeight(int weight) {itsWeight= weight;}};class Dog : public Mammal{//定义Dog类的数据成员和成员函数};改:#include <iostream.h>#include <string>using namespace std;class Mammal{protected:int itsAge;int itsWeight;public:Mammal();~Mammal();int GetAge(){return itsAge;}void SetAge(int age) {itsAge=age;}int GetWeight() { return itsWeight;}void SetWeight(int weight) {itsWeight= weight;}};class Dog : public Mammal{protected:char itscolor[20];public:Dog();void Setcolor(char *color) {strcpy(itscolor,color);}void getcolor(){cout<<"狗的颜色"<<itscolor<<endl;}//定义Dog类的数据成员和成员函数};////////////////////////Mammal::Mammal(){int age1,weight1;cout<<"请输入动物的年龄:"<<endl;cin>>age1;SetAge(age1);cout<<"请输入动物的体重:"<<endl;cin>>weight1;SetWeight(weight1);}Mammal::~Mammal(){cout<<"Destructor called."<<endl;}Dog::Dog(){char color[20];cout<<"请输入狗的颜色:"<<endl;cin>>color;Setcolor(color);cout<<"狗的颜色"<<itscolor<<"体重"<<GetWeight()<<"年龄"<<GetAge()<<endl; }void main(){Dog dog1;}(4)设计人员基类Person。
其成员包括:数据成员:姓名(字符数组)、性别(字符数组)和年龄(整型)成员函数:SetPerson,设置人员数据函数;DisplayPerson,显示人员数据函数;设计派生类1:Teacher,派生于Person。
新增成员包括:数据成员:职称(字符数组)、教研室(字符数组)和所授课程(字符数组)成员函数:SetTeacher,设置数据成员函数;DisplayTeacher,显示数据成员函数;设计派生类2:Student,派生于Person。
新增成员包括:数据成员:专业(字符数组)、班级(字符数组)和类别(int)其中类别取值:1(本科生)、2(硕士生)、3(博士生)成员函数:SetStudent,设置数据成员函数;DisplayStudent,显示数据成员函数;设计派生类3:PostDoctor(博士后),多重继承于Student与Teacher。
新增成员包括:数据成员:无成员函数:SetPostDoctor,设置数据成员函数;DisplayPostDoctor,显示数据成员函数;主函数:输入并输出一个教师、一个本科生、一个博士后数据。
#include <iostream.h>#include <string>using namespace std;#define n 20////////////类的定义class Person{protected:char name[n];char sex[n];int age;public:Person();void setperson();void displayperson();};class Teacher :virtual public Person{protected:char job[n];char room[n];char subject[n];public :Teacher();void setteacher();void displayteacher();};class Student:virtual public Person{protected:char major[n];char banji[n];int leibie;public :Student();void setstudent();void displaystudent();};class Postdoctor:public Teacher,public Student {public :Postdoctor();void setpostdoctor();void displaypostdoctor();};/////////////结构函数Person::Person(){setperson();}Teacher::Teacher(){setteacher();}Student::Student(){setstudent();}Postdoctor::Postdoctor(){}//////////////////设置数据//////////////////void Person::setperson(){cout<<"*****"<<"姓名:";cin>>name;cout<<"*****"<<"性别:";cin>>sex;cout<<"*****"<<"年龄:";cin>>age;}void Teacher::setteacher(){cout<<"*****"<<"职称:";cin>>job;cout<<"*****"<<"教研室:";cin>>room;cout<<"*****"<<"所授课程:";cin>>subject;}void Student::setstudent(){cout<<"*****"<<"专业:";cin>>major;cout<<"*****"<<"班级:";cin>>banji;cout<<"*****"<<"类别(1本科2硕士3博士):";cin>>leibie;}/////////////数据显示///////////void Person::displayperson(){cout<<"姓名:"<<name<<"性别:"<<sex<<"年龄:"<<age;}void Teacher::displayteacher(){displayperson();cout<<"职称:"<<job<<"教研室:"<<room<<"所授课程:"<<subject<<endl; }void Student::displaystudent(){displayperson();cout<<"专业:"<<major<<"班级:"<<banji<<"类别:"<<leibie<<endl;}void Postdoctor::displaypostdoctor(){displayperson();cout<<"职称:"<<job<<"教研室:"<<room<<"所授课程:"<<subject<<"专业:"<<major<<"班级:"<<banji<<"类别:博士后"<<endl;}///////////////////void main(){cout<<"您正在输入一个老师的信息:"<<endl;Teacher t1;cout<<"************************************************************************ ***syy割"<<endl;cout<<"您正在输入一个学生的信息:"<<endl;Student s1;cout<<"************************************************************************ ***syy割"<<endl;cout<<"您正在输入一个博士后的信息:"<<endl;Postdoctor p1;cout<<"************************************************************************ ***syy割"<<endl;cout<<endl;t1.displayteacher();cout<<endl;s1.displaystudent();cout<<endl;p1.displaypostdoctor();}。