继承与派生类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
继承与派生类
知识要点
1.掌握继承和派生的定义,派生类的定义方法。
(1)掌握继承的两种类型:单继承和多继承。
(2)掌握private,public,protected三种继承方式的特点。继承方式决定了基类中的成员在派生类中的属性。三种继承方式的共同点:基类的private成员在派生类中不可见。区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
(3)掌握派生类中的构造函数和析构函数的使用。基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。
(4)掌握派生类的同名覆盖规则。
(5)掌握赋值兼容规则。基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;
基类类型指针可以指向派生类对象。
2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。
派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。
3.掌握虚基类的概念和定义方法。在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
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:C++将类继承分为(1) 和(2) 两种。
8:派生类可以定义其_______________中不具备的数据和操作。
9:派生类构造函数的初始化列表中包含____________________________。
10:设有以下类的定义:
class A class B: protected A class C: private B
{ int A1; { int b1; { int c1;
protected: int A2; protected: int b2; protected: int c2;
public: int A3; public: int b3; public: int c3;
}; }; };
请按访问权限写出派生类C中具有的成员。
私有成员:(1)
保护成员:(2)
公有成员:(3) 。
11:指出并改正下面程序中的错误。
#include
class Point
{ int x,y;
public:
Point(int a=0,int b=0) {x=a; y=b;}
void move(int xoffset,int yoffset) {x+=xoffset; y+=yoffset;} int getx() {return x;}
int gety() {return y;}
};
class Rectangle:protected Point
{ int length,width;
public:
Rectangle(int x,int y,int l,int w):Point(x,y)
{ length=l;width=w;}
int getlength(){return length;}
int getwidth(){return width;}
};
void main()
{ Rectangle r(0,0,8,4);
r.move(23,56);
cout< < } 12:指出并改正下面程序中的错误。 #include class A { public: int x; A(int a=0) {x=a;} void display() { cout<<"A.x="< }; class B { public: int x; B(int a=0) {x=a;} void display() {cout<<"B.x="< class C:public A,public B { int y; public: C(int a,int b,int c) :A(a),B(b) { y=c; } int gety() { return y; } }; void main() { C myc(1,2,3); myc.x=10; myc.display(); } 13:看程序写结果 #include class Base