第5章 继承与派生-Qt C++跨平台图形界面程序设计基础(第2版)-殷立峰-清华大学出版社
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
protected:
};
string name;
int age;
char sex;
};
class Person{
class Employee: public Person {
public:
public:
void print( ) {
cout<<“name:”<<name<<endl; cout<<“age:”<<age<<endl;
cout<<"salary="<<salary<<endl; } ~Employee() { delete []name; } private: char *name; short age; float salary; };
//定义派生类Manager class Manager: public Employee { public:
void set_level(int l=0) {
level = l; } void Print_level() {
cout<<"level:"<<level<<endl; }
int main() {
Employee e("lihua",30,3000); e.Print(); Manager m; m.set_level(1); m.Print();
{
<<endl;
cout<<“name:”<<name<<endl; cout<<“age:”<<age<<endl; cout<<“sex:”<<sex<<endl; }
cout<<“salary”<<salary<<endl; } private: string department; float salary;
码
cout<<“age:”<<age<<endl; cout<<“sex:”<<sex<<endl; }
cout<<“department”<<department <<endl; cout<<“salary”<<salary<<endl; }
protected:
private:
string name; int age; char sex; };
第5章 继承与派生
5.1 继承概述 5.2 基类与派生类 5.3 派生类的构造和析构函数 5.4 多继承
5.1: 继承与派生概述
1. 类之间的关系: has-A, uses-A 和 is-A
has-A 组合关系用以描述一个类由多个“部件类”构成。
一个类中的数据成员是另一个已经定义的类的对象。
uses-A 一个类部分地使用另一个类。通过类之间成员函数的相互
private: string department; float salary;
};
char sex;
};
5.2. 基类与派生类
//定义基类Employee class Employee { public:
Employee(char *n="Noname", short a=0, float s=0) { name =new char(strlen(n)+1); strcpy(name,n); age=a; salary = s; } void Print() { cout<<"name:"<<name<<endl; cout<<"age:"<<age<<endl;
void print1( ) { print();
cout<<“department” <<department <<endl;
cout<<“salary”<<salary<<endl;
cout<<“sex:”<<sex<<endl;
}
} protected:
string name; int age;
派生: 在已有类的基础上新增自己的特性而产生新类的过 程。
基类(父类) :被继承的已有类。 派生类(子类):派生出的新类。 继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)
时,需要对原有程序进行改造。
3.为什么用继承
class Employee
class Person{
➢ 一个 B 类继承A类,或称从类 A 派生类 B 类 A 称为基类(父类),类 B 称为派生类(子类)
B1,B2 的基类
A 的派生类
C1,C2,C3 的基类
B1
A
A 的派生类(单继承)
B2
C3的基类
B1 的派生类 C1
C2
C3 B1,B2 的派生类(多继承)
继承: 保持已有类的特性而构造新类的过程。
m.Print_level(); return 0; }
private: int level;
};
Person类
Employee类
string name; int age; char sex; void print( );
string name; int age; char sex; void print( ); string department; float salary; void print1();
重 string name;
复 int age;
代 码
char sex;
string department;
float salary;
};
3.为什么用继承
class Employee :public Person
class Person{ public: …… void print( )
{
public: …… void print1( ) {cout<<“department”<<department
{
public: ……
public: …… void print1( )
void print( ) {
cout<<“name:”<<name<<endl;
{cout<<“name:”<<name<<endl; 重
cout<<“age:”<<age<<endl;
复 代
cout<<“sex:”<<sex<<endl;
联系,定义友员或对象参数传递实现。
is-A 机制称为“继承”。关系具有传递性,不具有对称性。
汽车分类图:
汽车
运输汽车
专用汽车
客车
货车
消防车
洒水车
急救车
清扫车
传递性 客车、货车、专用汽车都是汽车,具有汽车的共同特征 不具有对称性 不是所有汽车都属于专用汽车
备注
2. 继承 ➢ 继承 是类之间定义的一种重要关系,是实现代码重用的重要手段