C++_继承和派生类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
double); void Show( );
void Show( ); 基类2
13.1.3 派生类的三种继承方式
• 派生类中的成员由两部分组成,一部分是从基 类继承来的,一部分是派生类新增的。
• 从基类继承来的成员在派生类中的访问权限与 其继承方式是密切相关的,并且除了public, protected和private之外,还有一种访问权限称 为“不可访问”,即无论何种继承方式,派生 类中从基类继承过来的基类的私有成员在派生 类中都是不可访问的。
void ShowB() {cout<<t<<endl; }
基类A
};
void main()
{ B ob(1,2,3,4); //定义派生类对象
ob.ShowA();
//调用派生类中继承基类的公有成员函数
ob.ShowB();
//调用派生类中新定义的公有成员函数
}
成员(访问权限) int x;(不可访问)
Stu(int, double);
void Show( );
void Show( );
职工类Emp
基类1
int sta_id; double salary;
继承
int sta_id; double salary;
Emp(int, double);
Emp(int, double);
void Show( ); Stu_Emp(int, double,int,
派生类B
class A
{ int x;
//私有
protected:
int y;
//保护
public:
int z;
//公有
A(int a, int b,int c) { x=a; y=b; z=c;
}
void ShowA(){ cout<<x<<'\t'<<y<<'\t'<<z<<endl;}
};
成员(访问权限)
class B:public A //公有继承
int x;(私有)
{ int t; public:
//私有
int y;(保护) int z;(公有) A(int, int, int);(公有)
公有继承
B(int a, int b, int c, int d):A(a,b,c) { t=d;vo}id ShowA( );(公有)
void ShowA( );(保护)
基类A
int t;(私有) B(int, int, int, int);(公有)
void ShowB( );(公有)
派生类B
class A { int x; protected:
int y; public:
//私有 //保护
void main() { B ob(1,2,3,4); //定义派生类对象 // ob.ShowA(); //不能在类外调用基类成员
}
成员(访问权限) int x;(不可访问)
int y;(私有) int z;(私有) A(int, int, int);(私有) void ShowA( );(私有) int t;(私有) B(int, int, int, int);(公有) void ShowB( );(公有)
派生类B
保护继承
第13章 继承和派生类
新类从基类那里
学习目标: 得到基类的特征
从一个或多个以前 定义的类(基类)产 生新类的过程
➢继承和派生的概念,派生类的定义方法; ➢继承的不同方式对基类成员的访问控制; ➢单继承的概念、定义方法、单继承派生类构造 函数的执行顺序 ➢多继承的概念 ➢虚基类的概念和定义
13.1 继承与派生的概念
void ShowA( );(公有)
void ShowB() {ShowA( ); cout<<t<<endl; }
基类A
私有继承
};
void main()
{ B ob(1,2,3,4);
//定义派生类对象
// ob.ShowA(); //不能在类外调用基类成员
ob.ShowB();
//调用派生类中新定义的公有成员函数
• 基类的私有成员在派生类中并没有成为派生类 中的私有成员,只有基类的成员函数可以引用 它,而不能被派生类的成员函数引用。
公有继承
当派生类以公有(public)方式继承基类时,基 类的公有成员和保护成员在派生类中的访问权限 不变,仍为公有成员和保护成员;而基类的私有 成员则如前所述,在派生类中的访问权限成为“ 不可访问”。
Tri(double, double, double); double Peri(); //求三角形的周长
class Col:public Tri //公有继承Tri类 { double h; //表示三角柱体的高度 public:
/d/Co构oul(bd造leouV函bolleu数,(d)o; u//b求le,三do角ub柱le体,do的ub体le积);
<派生类新增成员变量和成员函数的定义> };
其中,继承方式有三种:public(公有)继承、 private(私有)继承和protected(保护)继承。 上述三种继承方式只能选择一个,如果没有选择, 则默认为private(私有)继承。
class Tri { double x, y,z; //表示三角形三边 public:
public:
double salary;// 代表职工工资
Stu(int , double); //学生类的构造 public:
函数
Emp(int , double);//职工类构造函数
void Show( ); //输出学生的信息 };
void Show( ); //输出职工的信息 };
class Stu_Emp: public Stu, public Emp
派生类1
派生类2
派生类1
派生类2
派生出来 的新类同样 可以作为基 类再继续派 生出更新的 类,依此类 推形成一个 层次结构。
(a)单一继承
(b)多重继承
学生 小学生 中学生 大学生
初中生 高中生
汽车
客车
货车
客货两用车
13.1.2 派生类的定义
单继承派生类的定义格式如下: class <派生类名>:[继承方式]<基类名> {
一代一代地派生下去,就形成了类的继承的层次结 构。
继承常用来表示类属关系,不能将继承理解 为构成关系。当从现存类中派生出新类时, 可以对派生类做如下几种变化:
①全部或部分地继承基类的成员数据或成员函数; ②可以增加新的数据成员; ③可以增加新的成员函数; ④可以重新定义已有的成员函数; ⑤可以改变现有成员的属性。
式2]<基类名2>, …, [继承方式n]<基类名n> {
<派生类新增成员数据和成员函数的定义> }; 继承方式的解释与单继承一致。
class Stu
{ int stu_id; //代表学生学号 double score;//代表学生成绩
class Emp { int sta_id;
//代表职工工号
类的公有成员和保护成员在派生类中的访问权限
全部成为私有成员;而基类的私有成员在派生类
中的访问权限仍为“不可访问”。当定义派生类
时省略基类的继承方式时,默认的继承方式是私
有(private)继承。
成员(访问权限)
成员(访问权限)
int x;(私有)
int x;(不可访问)
int y;(保护) int z;(公有)
当派生类以保护(protected)方式继承基类时, 基类的公有成员和保护成员在派生类中的访问权 限全部成为保护成员;而基类的私有成员在派生 类中的访问权限仍为“不可访问”。
保护(protected)继承是一种带有“血缘”关系
的继承形式,可以想象,基类无论经过多少次“
保护”继承,其公有成员和保护成员在派生类内
私有继承
int y;(私有) int z;(私有)
A(int, int, int);(公有)
A(int, int, int);(私有)
void ShowA( );(公有)
void ShowA( );(私有)
基类A
int t;(私有) B(int, int, int, int);(公有)
void ShowB( );(公有)
派生类B
class A
{ int x; //私有 Nhomakorabeaprotected:
int y; //保护
public:
int z; //公有
A(int a, int b,int c) { x=a; y=b; z=c;
}
void ShowA(){ cout<<x<<'\t'<<y<<'\t'<<z<<endl;}
}; class B:private A { int t; //私有 public:
//私有继承
成员(访问权限) int x;(私有) int y;(保护) int z;(公有)
A(int, int, int);(公有)
B(int a, int b, int c, int d):A(a,b,c) { t=d; }
double Peri( );
double Area( );
double Area( );
基类
double h; Col(double,double,double,double);
double Volu( );
派生类
在派生类的类体中,只需要声明新增的成员数据和 成员函数即可。
多继承的派生类定义格式如下: class <派生类名>:[继承方式1]<基类名1>, [继承方
成员(访问权限) int x;(私有) int y;(保护) int z;(公有)
A(int, int, int);(公有) void ShowA( );(公有)
基类A
公有继承
成员(访问权限) int x;(不可访问)
int y;(保护) int z;(公有) A(int, int, int);(公有) void ShowA( );(公有) int t;(私有) B(int, int, int, int);(公有) void ShowB( );(公有)
ob.ShowB(); //调用派生类中新定义的公有成员函数
}
int z; //公有
A(int a, int b,int c) { x=a; y=b; z=c; }
void ShowA() {cout<<x<<'\t'<<y<<'\t'<<z<<endl;}
在C++中,所谓“继承”就是在一个已存在的类的 基础上建立一个新的类。
已存在的类称为“基类”或“父类”;新建立的类 称为“派生类”或“子类。
新产生的类不仅有自己特有的成员数据和成员函数 ,而且有被继承类的全部成员数据和成员函数。
一个基类可以派生出许多个派生类,每一个派生类 又可以作为基类再派生出新的派生类,因此基类和 派生类是相对而言的。
int y;(保护) int z;(公有) A(int, int, int);(公有) void ShowA( );(公有) int t;(私有) B(int, int, int, int);(公有) void ShowB( );(公有)
派生类B
私有继承
当派生类以私有(private)方式继承基类时,基
部都是允许访问的,而在类外是禁止访问的。
成员(访问权限)
成员(访问权限)
int x;(私有)
int x;(不可访问)
int y;(保护) int z;(公有)
保护继承
int y;(保护) int z;(保护)
A(int, int, int);(公有)
A(int, int, int);(保护)
void ShowA( );(公有)
{public:
Stu_Emp(int, double, int ,double); //新类型的构造函数
void Show( ); //输出新类型的信息
};
学生类Stu
int stu_id;
在职学生类Stu_Emp int stu_id;
double score; 继承
double score;
Stu(int, double);
单一继承与多重继承
一个派生类只有一个直接基类的情况称为单一继承
(single-inheritance)。如果一个派生类可以同时有多个
基类,称为多重继承(multiple-inheritance),这时的派
生类同时得到了多个已有类的特征。
一个基类 可以直接 派生出多 基类 个派生类
基类1 基类2 …… 基类n
};
double Area();
};
三角形类
double x;
//求三角形的面积
三角柱体类
double x;
double y; double z;
继承
double y; double z;
Tri(double,double,double);
Tri(double,double,double);
double Peri( );
相关文档
最新文档