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

合集下载

国家二级C++机试(继承和派生)模拟试卷8(题后含答案及解析)

国家二级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++程序设计与应用基础第四章继承与派生习题答案

C++程序设计与应用基础第四章继承与派生习题答案

第四章继承与派生1、填空题1)在派生类中使用基类的成员,可以显示地使用___成员名限定符__来使用基类成员。

2)垂直访问时,保护成员的访问控制权限与____公有_____成员相同3)指向基类的对象的指针变量也可以指向___派生类____的对象。

4)若类Y是类X的私有派生类,类Z是类Y的派生类,则类Z__不能___访问类X的保护成员与公有成员。

5)在划线处填上适当的语句,完成下列程序。

#include <math.h>class Point{public:point(double a,double b,double c){___X=a;Y=b;Z=c;___}double Getx(){return X;}double Gety(){return Y;}double Getz(){return Z;}private:______double X;______protected:_____double Y,Z;_____};class Line :_____public______Point{public:Line(double a ,double b,double c,double d)_____:point(a,b,c)__{_ k=d;_ }void show(){cout<<Getx()<<endl;cout<<Gety()<<““<<.<<<endl;cout<<Getz()<<““<<Z<<endl;cout<<K<<endl;}private:double k;};void main(){Line obj(1.2,3.4,5.6,7.8);obj.show();}6)设置虚基类的目的是__解决二义性问题___,可通过___关键字virtual__标识虚基类。

国家二级C++机试(继承和派生)模拟试卷20

国家二级C++机试(继承和派生)模拟试卷20

国家二级C++机试(继承和派生)模拟试卷20(总分:54.00,做题时间:90分钟)一、选择题(总题数:27,分数:54.00)1.已知基类Employee只有一个构造函数,其定义如下:Employee::Employee(int n):id(n){} Manager 是Employee的派生类,则下列对Manager的构造函数的定义中,正确的是( )。

(分数:2.00)A.Manager::Manager(int n):id(n){}B.Manager::Manager(int n){id=n;}C.Manager::Manager(int n):Employee(n){} √D.Manager::Manager(int n){Employee(n);}解析:解析:基类的构造函数是带有参数的,派生类从基类派生,这就需要在派生类的构造函数名后面显示的调用基类的构造函数。

2.有如下程序:#include<iostream>using namespace sta;class A{ public:A(){cout<<'A';} ~A(){cout<<'C';} }; class B:public A{ public: B(){cout<<'G';} ~B(){cout<<'T';} };int main(){ B obj; return 0; } 运行这个程序的输出结果是( )。

(分数:2.00)A.GATCB.AGTC √C.GACTD.AGCT解析:解析:派生类B是由基类A公开继承而来,所以在创建类B的obi对象时,首先执行基类A的构造函数A(),输出A,再执行派生类B的构造函数B(),输出G,当程序结束时,首先执行派生类的析构函数~B(),输出T,再执行基类A的析构函数~A(),输出C。

3.有如下程序: #include<iostream> using namespace std; class Base{ public: void fun0{tout <<'B';} }; class Derived:public Base{ public: void fun(){____cout<<'D';} }; int main(){ Derived d; d.fun(); return 0; } 若程序的输出结果是BD,则划线处缺失的部分是( )。

C 第八章继承与派生习题习题解答

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%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语言程序设计实验答案_继承与派生

C语言程序设计实验答案_继承与派生

实验07 继承与派生(4学时)(第7章继承与派生)一、实验目的二、实验任务7_1 声明一个基类Animal。

有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。

7_2 声明一个基类BaseClass。

有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

7_3 声明一个车(vehicle)基类。

具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。

自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。

从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

7_4 以实验6中的People(人员)类为基类。

派生出student(学生)类,添加属性:班号char classNo[7];派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。

从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。

重载相应的成员函数,测试这些类。

类之间的关系如图7-1所示。

图7-1 类图三、实验步骤1.(编程)声明基类Animal,成员变量age声明为私有的。

构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:(注:在桌面创建一个文本文件,将输出框的内容复制到文本文件中,再复制★程序及运行结果:1> f:\projects\cpp\cpp\main.cpp(5) : 参见“Animal”的声明1>1>生成失败。

C++类的继承与派生练习题

C++类的继承与派生练习题
C++类的继承与派生
文件
大小、修改时间等
ห้องสมุดไป่ตู้
编码方式: ASCII还是 Unicode
文本文件
二进制文 件 多媒体文 件
何种操作系 统平台? (枚举或字 符串实现)
INI文件
哪个程序的 配置文件
XML文件
可执行文 件
权限(用枚 举表示)
哪个版本的 XML
XML多媒 体文件
用于何种便 携式设备?
质量高低 (用枚举来 表示)
请用C++继承和派生的相关知识来实现上面的类库示意图。 每个类旁边的旁注表示该类有的基本成员(或称之为属性)。 最后达到的效果是: 实例化一个XML多媒体文件后,能够读出所有其继承的类的属性(当然包括 它自身的)。

继承与派生习题

继承与派生习题

继承与派生习题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++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。

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

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

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。

习题9-继承和派生

习题9-继承和派生

习题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++体系中,不能被派生类继承的有()。

C++实验三继承和派生类(附答案)

C++实验三继承和派生类(附答案)

实验三继承和派生类实验目的和要求1.理解类的继承的概念,能够定义和使用类的继承关系。

2.掌握派生类的声明与定义方法。

3.熟悉公有派生和私有派生的访问特性。

4.学习虚基类在解决二义性问题中的作用。

实验内容1.先阅读下面的程序,分析程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。

(1)#include<iostream.h>class A{public:A(){cout<<"A::A() called.\n";}~A(){cout<<"A::~A() called.\n";}};class B:public A{public:B(int i){cout<<"B::B() called.\n";buf=new char[i];}~B(){delete []buf;cout<<"B:~B() called.\n";}private:char *buf;};void main(){B b(10);}(2)#include<iostream.h>class A{public:A(int a,int b):x(a),y(b){cout<<"A constructor..."<<endl;}void Add(int a,int b){x+=a;y+=b;}void display(){cout<<"("<<x<<","<<y<<")"<<endl;}~A(){cout<<"destructor A..."<<endl;}private:int x,y;};class B:private A{private:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d),Aobj(1,1) {cout<<"B constructor..."<<endl;}void Add(int x1,int y1,int x2,int y2){A::Add(x1,y1);i+=x2;j+=y2;}void display()A::display();Aobj.display();cout<<"("<<i<<","<<j<<")"<<endl;}~B(){cout<<"destructor B..."<<endl;}};void main(){B b(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();}(3)#include<iostream.h>class A{public:A(int a):x(a){cout<<"A constructor..."<<x<<endl;}int f(){return ++x;}~A(){cout<<"destructor A..."<<endl;}private:int x;};class B:public virtual A{private:int y;A Aobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c)cout<<"B constructor..."<<y<<endl;}int f(){A::f();Aobj.f();return ++y;}void display(){cout<<A::f()<<'\t'<<Aobj.f()<<'\t'<<f()<<endl;}~B(){cout<<"destructor B..."<<endl;}};class C:public B{public:C(int a,int b,int c):B(a,b,c),A(0){cout<<"C constructor..."<<endl;}};class D:public C,virtual public A{public:D(int a,int b,int c):C(a,b,c),A(c){cout<<"D constructor..."<<endl;}~D(){cout<<"destructor D..."<<endl;}};void main(){D d(7,8,9);d.f();d.display();}#include<iostream.h>class Base1{public:Base1(){cout<<"class Base1!"<<endl;}};class Base2{public:Base2(){cout<<"class Base2!"<<endl;}};class Level1:public Base2,virtual public Base1 {public:Level1(){cout<<"class Level1!"<<endl;}};class Level2:public Base2,virtual public Base1 {public:Level2(){cout<<"class Level2!"<<endl;}};class TopLevel:public Level1,virtual public Level2 {public:TopLevel(){cout<<"class TopLevel!"<<endl;}};void main(){TopLevel obj;}2.调试下列程序,并对程序进行修改后再调试,指出调试中的出错原因。

第3章继承和派生习题

第3章继承和派生习题
4.多继承派生类构造函数构造对象时,()被最先调用。
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.关于多继承二义性的描述,()是错误的。

国家二级C++机试(继承和派生)模拟试卷7(题后含答案及解析)

国家二级C++机试(继承和派生)模拟试卷7(题后含答案及解析)

国家二级C++机试(继承和派生)模拟试卷7(题后含答案及解析) 题型有:1. 选择题选择题1.对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是( )。

A.公有或私有B.私有C.保护或私有D.公有或保护正确答案:D解析:通过公有继承定义的派生类,其成员函数可以访问基类的公有成员和保护成员,但不能访问基类的私有成员。

知识模块:继承和派生2.建立一个有成员对象的派生类对象时,各构造函数体的执行次序为( )。

A.派生类、成员对象类、基类B.成员对象类、基类、派生类C.基类、成员对象类、派生类D.基类、派生类、成员对象类正确答案:C解析:建立派生类对象的时候,构造函数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序(自左向右)。

然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序(自上而下),最后是执行派生类的构造函数。

知识模块:继承和派生3.有如下类定义和变量定义:class Parents{ public:int publicData;prlVate:mt privateData;};class ChildA:public Parents{/*类体略*/};class ChildB:private Parents{/*类体略*/);ChildA a:ChildB b:下列语句中正确的是( )。

A.cout<<a.publicData<<endl;B.cout<<a.priVateData<<endl;C.cout<<b.publicData<<endl;D.cout<<b.priVateData<<endl;正确答案:A解析:基类Parents的私有成员privateData在派生类ChildA和ChildB中是不可以访问,所以选项B、D是错误,而派生类ChildB私有继承基类Parents,所以基类Parents的公有成员publicData在派生类ChildB中变为私有成员,只能在派生类ChildB内部访问,因而选项C是错误的。

C继承与派生类习题

C继承与派生类习题

第九章继承与派生类9.2 典型例题解析与解答例题 1:以下对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类B.派生类最少有一个基类C.派生类的成员除了它自己的成员外,还包括了它的基类成员D.派生类中继承的基类成员的接见权限到派生类保持不变答案: D解析:一个派生类可以作为另一个派生类的基类。

无论是单继承还是多继承,派生类最少有一个基类。

派生类的成员除了它自己的成员外,还包括了它的基类成员。

派生类中继承的基类成员的接见权限到派生类受继承方式影响的,关于私有继承,基类的 public , protected 成员在派生类中作为 private 成员;关于公有继承,基类的public , protected 成员在派生类中接见属性不变;关于保护继承,基类的public 、 protected成员在派生类中作为protected成员。

例题 2:派生类的对象对它的哪一类基类成员是可以接见的?()A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员答案: A解析:公有继承的基类的公有成员在派生类中保持公有接见权限,因此派生类对象可以接见它;公有继承的基类的保护成员在派生类中保持保护接见权限,因此派生类对象不行以接见它;基类的私有成员不可以被派生到派生类中,因此派生类对象不可以接见它;保护继承的基类的公有成员在派生类中变为保护的接见权限,因此派生类对象不行以接见它。

例题 3:关于多继承二义性的描述,()是错误的。

A.派生类的多个基类中存在同名成员时,派生类对这个成员接见可能出现二义性B.一个派生类是从拥有共同的间接基类的两个基类派生来的,派生类对该公共基类的接见可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限制D.派生类和它的基类中出现同名函数时,将可能出现二义性答案: D解析:出现二义性有两种状况:调用不一样基类的同样成员时可能出现二义性;接见共同基类的成员时可能出现二义性。

国家二级C++机试(继承和派生)模拟试卷5(题后含答案及解析)

国家二级C++机试(继承和派生)模拟试卷5(题后含答案及解析)

国家二级C++机试(继承和派生)模拟试卷5(题后含答案及解析) 题型有:1. 选择题选择题1.下列有关继承和派生的叙述中,正确的是( )。

A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类正确答案:D解析:止b题考查的是继承和派生。

无论是哪种继承方式,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项A和B错误;公有继承时,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象,所以选项C错误。

知识模块:继承和派生2.在类声明中,紧跟在“public;”后声明的成员的访问权限是( )。

A.私有B.公有C.保护D.默认正确答案:B解析:类中提供了3种访问控制的权限:公有。

私有和保护。

其中公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行。

私有类型的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的,保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。

知识模块:继承和派生3.有如下类定义:class XX{int xdata;public:XX(int n=0):xdata(n){}};class YY:public XX{int ydata;public:YY(int m=0,int n=0):XX(m),ydata(n){}};YY类的对象包含的数据成员的个数是( )。

A.1B.2C.3D.4正确答案:B解析:因为类XX包括一个数据成员xdata,而类YY继承自类XX,所在类YY中也包含数据成员xdata,同时类YY中也定义了其本身的数据成员ydata,因而YY类的对象包含的数据成员的个数是2。

知识模块:继承和派生4.下列关于基类和派生类关系的叙述中,正确的是( )。

继承与派生类C试题

继承与派生类C试题

继承与派生‎类知识要点1.1.掌握继承和‎派生的定义‎,派生类的定‎义方法。

(1)掌握继承的‎两种类型:单继承和多‎继承。

(2)掌握pri‎v ate,publi‎c,prote‎c ted三‎种继承方式‎的特点。

继承方式决‎定了基类中‎的成员在派‎生类中的属‎性。

三种继承方‎式的共同点‎:基类的pr‎ivate‎成员在派生‎类中不可见‎。

区别:对于私有继‎承,基类的pu‎blic、prote‎c ted成‎员在派生类‎中作为pr‎ivate‎成员;对于公有继‎承,基类的pu‎b lic、prote‎c ted成‎员在派生类‎中访问属性‎不变;对于保护继‎承,基类的pu‎blic、prote‎c ted成‎员在派生类‎中作为pr‎otect‎e d成员。

(3)掌握派生类‎中的构造函‎数和析构函‎数的使用。

基类的构造‎函数和析构‎函数不能继‎承,所以必要时‎在派生类中‎定义自己的‎构造函数和‎析构函数。

派生列的构‎造函数完成‎基类中新增‎数据成员和‎基类数据成‎员的初始化‎,基类数据成‎员的初始化‎通过基类构‎造函数来实‎现。

(4)掌握派生类‎的同名覆盖‎规则。

(5)掌握赋值兼‎容规则。

基类对象可‎以使用公有‎派生类对象‎来代替,包括:派生类对象‎可以赋值给‎基类对象;派生类对象‎可以初始化‎基类对象的‎引用;基类类型指‎针可以指向‎派生类对象‎。

2.2.掌握多重继‎承的概念、定义方法、多重继承派‎生类构造函‎数的执行顺‎序。

派生类构造‎函数的执行‎顺序是先执‎行所有基类‎的构造函数‎(顺序按照定‎义派生类时‎指定的各基‎类顺序),在执行对象‎成员所在类‎的构造函数‎(顺序按照他‎们在类中的‎声明顺序),最后执行派‎生类构造函‎数体中的内‎容。

3.3.掌握虚基类‎的概念和定‎义方法。

在多重继承‎中,如果多条继‎承路径上有‎一个公共的‎基类,则在这些路‎径的汇合点‎上的派生类‎会产生来自‎不同路径的‎公共基类的‎多个拷贝,如果用vi‎rtual‎把公共基类‎定义成虚基‎类,则只会保留‎公共基类的‎一个拷贝。

C++(练习)第8章,继承与派生

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. 设置虚基类的目的是( )。

C++继承与派生类习题

C++继承与派生类习题

第九章继承与派生类9.2 典型例题分析与解答例题1:下列对派生类的描述中,(?????)是错误的。

A.??一个派生类可以作为另一个派生类的基类B.??派生类至少有一个基类C.??派生类的成员除了它自己的成员外,还包含了它的基类成员D.?派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。

无论是单继承还是多继承,派生类至少有一个基类。

派生类的成员除了它自己的成员外,还包含了它的基类成员。

派生类中继承的基类成员的访问权限到派生类受继承方式影响的,对于私有继承,基类的public,protected成员在派生类中作为private成员;对于公有继承,基类的public,protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。

例题2:派生类的对象对它的哪一类基类成员是可以访问的(?????)???A.公有继承的基类的公有成员???????????????B. 公有继承的基类的保护成员???C. 公有继承的基类的私有成员???????????????D. 保护继承的基类的公有成员答案:A分析:公有继承的基类的公有成员在派生类中保持公有访问权限,所以派生类对象可以访问它;公有继承的基类的保护成员在派生类中保持保护访问权限,所以派生类对象不可以访问它;基类的私有成员不能被派生到派生类中,所以派生类对象不可以访问它;保护继承的基类的公有成员在派生类中变成保护的访问权限,所以派生类对象不可以访问它。

例题3:关于多继承二义性的描述,(?????)是错误的。

A.?派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.??一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.??解决二义性最常用的方法是作用域运算符对成员进行限定D.??派生类和它的基类中出现同名函数时,将可能出现二义性答案:D分析:出现二义性有两种情况:调用不同基类的相同成员时可能出现二义性;访问共同基类的成员时可能出现二义性。

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