当前位置:文档之家› 第11章继承和派生

第11章继承和派生


该用成,员必名须在 用派 基生 类类 名v{的受Aof(i:d作限:)f;h(用。() )域例内://不//BA直类类接中中可的的见ff ,如果要使
}
};
void main( )
{ B b;
b.f( );
// B 类中的 f
b.A::f( ); //A类中的f
}
即使派生类c{la中ss定Bin义:tp了zu; b与li基c A类同名但参数不同的成员
箭头表示继承的方向,从派生类指向基类。
一个派生类不仅可以从一个基类派生,也可以从 多个基类派生。一个派生类有两个或多个基类的称 为多重继承(multiple inheritance)。
关于基类和派生类的关系:派生类是基类的具体化, 而基类则是派生类的抽象。
11.2 派生类的声明方式
声明派生类的一般形式为: class 派生类名: [继承方式] 基类名 { 派生类新增加的成员 };
重写构造函数与析构函数
派生类对象结构
基类对象
对于下面的继承关系:
a b
子类对象
a b c
基类部分 子类添加部分
子类对象空间总是不小于基类 对象
class Father{ int a,b;
public: // 成员函数
}; class Son:public Father{
int c; public:
第4篇面向对象的程序设计
第11章 继承与派生 第12章 多态性与虚函数 第13章 输入输出流 第14章 C++工具
第11章 继承与派生
11.1 继承与派生的概念 11.2 派生类的声明方式 11.3 派生类的构成 11.4 派生类成员的访问属性 11.5 派生类的构造函数和析构函数 11.6 多重继承 11.7 基类与派生类的转换 11.8 继承与组合 11.9 继承在软件开发中的重要意义
已存在的类(例如“马”)称为“基类(base class)” 或“父类(father class)”。新建立的类(例如“公 马”)称为“派生类(derived class)”或“子类 (son class)”。见图11.2示意。
图11.1
图11.2
一个派生类只从一个基类派生,这称为单继承 (single inheritance),这种继承关系所形成的层次 是一个树形结构,见下图。
// 成员函数 };
11.4 派生类成员的访问属性
继承可以公有继承,保护继承和私有继承。 公有继承是普通继承,基类可以为大多数应用服 务。也可以重复继承。 保护继承是“单传”继承,只继承给自己的后代, 应用是以子孙的公有成员函数来对外展开服务的。 私有继承是“绝版”继承,该基类只继承直接的 子类,而不考虑让子类再继承下去。
构造一个派生类包括以下4部分工作:
吸收基类的成员
不论是数据成员,还是函数成员,除 构造函数与析构函数外全盘接收
改造基类成员
ቤተ መጻሕፍቲ ባይዱ
声明一个和某基类成员同名的新成员,派 生类中的新成员就屏蔽了基类同名成员称 为同名覆盖(override)
派生类新成员必须与基类成员不同名,它的
发展新成员 加入保证派生类在功能上有所发展。
继承方式包括: public(公用的),private(私有的) 和protected(受保护的),如果不写此项,则默认为 private(私有的)。
11.3 派生类的构成 派生类分为两大部分:
一部分是从基类继承来的成员 另一部分是在声明派生类时增加的部分 每一部分均分别包括数据成员和成员函数。
编制 派生 类时 可分 四步
{ B b; b.f( ); //A类中的 f b.g( ); //A类中的g b.h( ); //B类中的h
void h();
}
};
派生类的c{la定ss义Bi用n:t于pzu;描bli述c A派生类与基类的差别。派生 类中可以给pu出bl新ic:的成员,也可以对基类的成员进行重
定义。如果在派vv生ooii类dd fh中(());对基类的某个成员进行重定义, 则在派生类中对{该f(成);员//B的类访中问的是f 针对派生类中重定义
在公有派生类中的访问属性 不可访问 公有
保护
例:下面定义了两个具 有单继承关系的类A和 B,其中, A为基类,B为派生类:
class A {
int x,y; public:
void f(); void g(); }; class B : public A { int z; public: void h(); };
的成员。
g( ); //A类中的g }
};
void main( )
{ B b;
b.f( ); //B类中的 f
b.g ( ); //A类中的g
b.h( ); //B类中的h
}
派生类成员cla名ss的B作: p用ub域li嵌c A套在基类的作用域中,对
于基类的一个{pu成bl员ici:n,t 如z; 果派生类中没有定义与其同名 的成员,则该成员v名oid在f派( );生类的作用域内可见,否则,
在C++中对派生类有以下几点规定:
class A
派生类{ 除了拥有基类的所有成员(基类的构造函数
和赋值操作符in重t x载,y;函数除外)外,也可以具有新的成
员。
public: void f();
void g(); }; class B : public A {
int z; public:
void main()
面向对象程序设计有4个主要特点: 抽象 封装 继承 多态性
面向对象技术强调软件的可重用性(software reusability) 。C++语言提供了类的继承机制,解 决了软件重用问题。
11.1 继承与派生的概念
➢在C++中可重用性是通过继承(inheritance)这一 机制来实现的。继承是C++的一个重要组成部分。 ➢在C++中,所谓“继承”就是在一个已存在的类 的基础上建立一个新的类。 ➢见图11.1示意。
11.4.1 公有继承
public继承: 基类的public成员, 在派生类中成为public成员 基类的protected成员, 在派生类中成为protected 成员 基类的private成员, 在派生类中成为不可直接使用的成员
表11.1公用基类在派生类中的访问属性
公有基类的成员
私有成员 公有成员 保护成员
函数,基类的pu同bl名ic:函数在派生类中的作用域中也是不
相关主题