C++第7章 继承与派生---学生练习题

合集下载

第7章习题答案

第7章习题答案

第七章派生与继承1.单选题(1).下列关于继承的描述中,错误的是(B)。

A.继承是重用性的重要机制B.C++语言支持单重继承和双重继承C.继承关系不是可逆的D.继承是面向对象程序设计语言的重要特性(2).下列关于基类和派生类的描述中,错误的是(C)。

A.一个基类可以生成多个派生类B.基类中所有成员都是它的派生类的成员C.基类中成员访问权限继承到派生类中不变D.派生类中除了继承的基类成员还有自己的成员(3).下列关于派生类的描述中,错误的是(D)。

A.派生类至少有一个基类B.一个派生类可以作另一个派生类的基类C.派生类的构造函数中应包含直接基类的构造函数D.派生类默认的继承方式是public(4).派生类的对象可以直接访问的基类成员是(A)。

A.公有继承的公有成员B.保护继承的公有成员C.私有继承的公有成员D.公有继承的保护成员(5).下列描述中,错误的是(D)。

A.基类的protected成员在public派生类中仍然是protected成员B.基类的private成员在public派生类中是不可访问的C.基类public成员在private派生类中是private成员D.基类public成员在protected派生类中仍是public成员(6).派生类构造函数的成员初始化列表中,不能包含的初始化项是(B)。

A.基类的构造函数B.基类的子对象C.派生类的子对象D.派生类自身的数据成员(7).下列关于子类型的描述中,错误的是(B)。

A.在公有继承下,派生类是基类的子类型B.如果类A是类B的子类型,则类B也是类A的子类型C.如果类A是类B的子类型,则类A的对象就是类B的对象D.在公有继承下,派生类对象可以初始化基类的对象引用(8).下列关于多继承二义性的描述中,错误的是(D)。

A.一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现二义性B.一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问公共基类成员时,可能出现二义性C.解决二义性的方法是采用类名限定D.基类和派生类中同时出现同名成员时,会产生二义性2.多重继承与单一继承的区别是什么?答:派生类只有一个基类的称为单一继承。

继承与派生习题

继承与派生习题

一、选择填空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.派生类可以定义其_______________中不具备的数据和操作。

继承与派生习题

继承与派生习题

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)。

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

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

C 课后习题答案第七章

C  课后习题答案第七章

C++作业答案第7章继承7.1 选择题1.在c++中,类与类之间的继承关系具有( c )。

(a) 自反性 (b) 对称性 (c) 传递性 (d) 反对称性2.下列关于类的继承描述中,( a,b )是错误的。

(a) 派生类可以访问基类的所有数据成员,调用基类的所有成员函数(b) 派生类也是基类,所以基类具有派生类的全部属性和方法(c) 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法(d) 一个基类可以有多个派生类,一个派生类可以有多个基类3.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( a )。

(a) public 成员 (b)private成员(c) protected成员 (d)友员4.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( b )。

(a) public 成员 (b)private成员(c) protected成员 (d)友员5.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( c )。

(a) public 成员 (b)private成员(c) protected成员 (d)友员6.不论派生类以何种方式继承基类,都不能使用基类的( b )。

(a) public 成员 (b)private成员(c) protected成员 (d)public 成员和protected成员7.下面描述中,错误的是( b, c )。

(a) 在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问(b) 在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问(c) 在基类定义的public和protected成员在保护继承的派生类中不可见(d) 在派生类中不可见的成员要变成可访问的需进行访问声明8.在c++中,不能被派生类继承的函数是( b,c )。

(a) 成员函数 (b)构造函数(c) 析构函数 (d)静态成员函数9.在创建派生类对象时,构造函数的执行顺序是( d )。

c 继承与派生习题答案

c  继承与派生习题答案

继承与派生概念填空题1.1在C++中,三种派生方式的说明符号为public、private、protected不加说明,则默认的派生方式为private。

1.2当公有派生时,基类的公有成员成为派生类的公有成员;保护成员成为派生类的保护成员;私有成员成为派生类的不能直接访问成员。

当保护派生时,基类的公有成员成为派生类的保护成员;保护成员成为派生类的保护成员;私有成员成为派生类的不能直接访问成员。

1.3 派生类的构造函数一般有3项工作要完成:首先基类初始化,其次成员对象初始化,最后执行派生类构造函数体。

1.4多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现二义性。

在派生类中采用虚基类或作用域分辨符来消除该问题。

3.选择题3.1下面对派生类的描述中,错误的是(D )。

A.一个派生类可以作为另外一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变3.2下列对友元关系叙述正确的是(A)。

A.不能继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率3.3当保护继承时,基类的(B)在派生类中成为保护成员,不能通过派生类的对象来直接访问。

A.任何成员B.公有成员和保护成员C.公有成员和私有成员D.私有成员3.4设置虚基类的目的是(B)。

A.简化程序B.消除二义性C.提高运行效率D.减少目标代码3.5在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是(C )。

A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针3.6有如下类定义: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)。

继承与派生类答案

继承与派生类答案

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

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

(2)掌握private,public,protected三种继承方式的特点。

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

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

区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。

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

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

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

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

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

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

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

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

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

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

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

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

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赋值时,会出现类似以下的错误提示:(注:在桌面创建一个文本文件,将输出框的内容复制到文本文件中,再复制到Word文件中,不会出现汉字的乱码)把age改为公有变量后重新编译就可以了.程序名:lab7_1。

C++继承和派生编程参考答案

C++继承和派生编程参考答案

继承和派生练习一1.以日期类cDate(有数据成员年月日)为基类派生日期时间类cTime,新增数据成员时分秒,要求有构造函数、输出所有成员的函数,测试程序正确性。

#include<iostream.h>class cDay{int ye,mo,da;public:cDay(int a=2000,int b=1,int c=1){ye=a,mo=b,da=c;}void Dout(void){cout<<ye<<' '<<mo<<' '<<da<<endl;}};class cTime:public cDay{int ho,mi,se;public:cTime(int a=2000,int b=1,int c=1,int d=12,int e=12,int f=12):cDay(a,b,c){ho=d,mi=e,se=f;}void Tout(void){Dout();cout<<ho<<' '<<mi<<' '<<se<<endl;}};void main(void){cTime t1(2010,4,30,15,20,23);t1.Tout();}2.以三维坐标类cPoint为基类派生圆类cCircle,新增数据成员半径;再以圆类为基类派生圆柱体类cColumn,新增数据成员高度,要求有构造函数、输出所有成员的函数,在相关类中定义求圆面积的成员函数、求体积的成员函数,测试程序正确性。

#include<iostream.h>#define PI 3.1415926class cPoint{float x,y,z;public:cPoint(float a=1,float b=1,float c=1){x=a,y=b,z=c;}void Pout(void){cout<<"x="<<x<<" y="<<y<<" z="<<z;}};class cCircle:public cPoint{float r;public:cCircle(float a=1,float b=1,float c=1,float d=2):cPoint(a,b,c){r=d;}float area(void){return PI*r*r;}void Cout(void){Pout();cout<<" r="<<r;}};class cColumn:public cCircle{float h;public:cColumn(float a=1,float b=1,float c=1,float d=2,float e=3):cCircle(a,b,c,d){ h=e;}float v(void){return area()*h;}void Coout(void){Cout();cout<<" h="<<h<<endl;}};void main(void){cCircle t1(1,2,3,4);t1.Cout();cout<<" area="<<t1.area()<<endl;cColumn t2(2,3,4,5,6);t2.Coout();cout<<"v="<<t2.v()<<endl;}。

继承和派生习题与解析

继承和派生习题与解析

void car::show() {
cout <<" 车型:小车" << endl; vehicle::show(); cout << "载人:" << passenger_load << "人" << endl; cout << endl; } truck:: truck(int wheels, float weight,int passengers, float max_load):vehicle(wheels,weight) { passenger_load=passengers; payload=max_load; } int truck::get_passengers() { return passenger_load; } float truck::efficiency() { return payload/(payload+weight); }
输出结果 车型:小车 车轮:4个 重量:2000公斤 载人:5人
车型:卡车 车轮:10个 重量:8000公斤 载人:3人 效率:0.977012
7 设计一个圆类circle和一个桌子类table,另设计一 个圆桌类roundtable,它是从前两个类派生的,要求 输出一个圆桌的高度、面积和颜色等数据。
解: 本题说明单继承情况下构造函数和析构函数的调用
顺序。这里base为基类,subs为派生类。 所以输出为:
constructing base class constructing sub class destructing sub class destrcuting base class 注意:在单继承情况下,首先调用基类的构造函数 , 随后调用派生类的构造函数,析构函数的调用顺序则 正好相反。

继承与派生习题

继承与派生习题

继承与派生习题集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解析:由于是私有继承,则基类中的保护成员在私有派生类中的访问属性为私有。

C语言第7章习题及实验参考答案~1

C语言第7章习题及实验参考答案~1

C语言第7章习题及实验参考答案~1第7章习题及参考答案1. 编程,从键盘上输入n个整数,按逆序输出这些数。

参考程序:#include#define N 5void main(){int i,t,a[N];for(i=0;i<n;i++)< p="">scanf("%d",&a[i]);for(i=0;i<n;i++)< p="">printf("%5d ",a[i]);printf("\n");for(i=0;i<="" p="">{t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;}for(i=0;i<n;i++)< p="">printf("%5d ",a[i]);}2. 编程,已知某同学某门课程的平时、实习、测验和期末成绩,求该同学该门课程的总评成绩。

其中,平时、实习、测验和期末分别占10%、20%、20%、50%。

参考程序:#includevoid main(){int i ;float tot,a[4];for(i=0;i<4;i++)scanf("%f",&a[i]);tot=0.1*a[0]+0.2*a[1]+0.2*a[2]+0.5*a[3];printf("%f ",tot);}3. 编程,输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。

参考程序:# include "stdio.h"#define N 10void main(){int term[N];int i,max,min;for(i=1;i<n,i++)< p="">scanf("%d",&term[i]);max=0;min=0;for(i=1;i<10;i++){if (term[i]< term[min])min=i;if (term[i]> term[max])max=i;}if(term[min]!=term[0]){ t=term[min]; term[min]= term[0]; term[0]=t;}if(term[max]!=term[N-1]){ t=term[max]; term[max]= term[N-1]; term[N-1]=t;}for(i=1;i<n,i++)< p="">printf("%d",trem[i]);}4. 编程,已有一个已排好序的数组(由小到大),今输入另一个数,要求仍然有序。

继承和派生习题与解析

继承和派生习题与解析
解:
vehicle类是基类由它派生出car类和truck类将公共 的属性和方法放在vehicle类中。 本题程序如下:
#include<iostream.h> class vehicle // 定义汽车类 {
protected: int wheels; // 车轮数 float weight; // 重量
解: 本题说明 派生类中含有对象成员情况下构造函数和析构函数
的调用顺序。这里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)派生类的构造函数
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); }

继承和派生习题

继承和派生习题

继承和派生习题一、单选题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试题

继承与派生‎类知识要点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‎把公共基类‎定义成虚基‎类,则只会保留‎公共基类的‎一个拷贝。

继承和派生复习

继承和派生复习

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

A、构造函数B、虚函数C、静态成员函数D、赋值操作函数7、下列说法错误的是()。

A、公有继承的基类中的public成员在派生类中仍是public的B、公有继承的基类中的private成员在派生类中仍是private的C、私有继承的基类中的public成员在派生类中变成private的D、保护继承的基类中的public成员在派生类中变成protected的8、下列对继承的描述中,错误的是()。

A、析构函数不能被继承B、派生类也是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变9、下列对基类和派生类关系的描述中,错误的是()。

A、派生类是基类的具体化B、派生类是基类的子集C、派生类是基类定义的延续D、派生类是基类的组合10、C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<iostream>
using namespace std;
class M{
public:
M(const char *s){cout<<"M:"<<s<<endl;}
};
class A{
M m;
public:
A(const char *s):m("in A"){cout<<"A:"<<s<<endl;}
};
class B{
M m;
public:
B(const char *s):m("in B"){cout<<"B:"<<s<<endl;}
};
class C{
M m;
public:
C(const char *s):m("in C"){cout<<"C:"<<s<<endl;}
};
class D{
M m;
public:
D(const char *s):m("in D"){cout<<"D:"<<s<<endl;}
};
class E:public A,virtual public B,virtual public C{
M m;
public:
E(const char *s):A("from E"),B("from E"),C("from E"),m("in E")
{cout<<"E:"<<s<<endl;}
};
class F:virtual public B,virtual public C,public D{
M m;
public:
F(const char *s):B("from F"),C("from F"),D("from F"),m("in F")
{cout<<"F:"<<s<<endl;}
};
class G:public E,public F{
M m;
public:
G(const char *s):B("from G"),C("from G"),E("from G"),F("from G"),
m("in G")
{cout<<"G:"<<s<<endl;}
};
void main(){
G g("from main");
}。

相关文档
最新文档