第四章派生类与继承
第四章 派生类与继承 1
41派生类的概念 411为什么要使用继承 从现有类出发建立新的类,使新类继承老类的特点和功能,并 且又加上自己的特点和功能的程序设计方法,是面向对象程序设 计一个重要的技术。 老的类叫基类,新的类叫派生类 对派生类可做如下几种变化: 继承 昆虫 (1)可以增加新的成员数据。 派生 (2)可以增加新的成员函数。 有翅类 无翅类 (3)可以重新定义己有的成员函数打 (4)可以改变现有成员的属性。匚蛾靥蝇蝴蝶]单一继承 C++中有两种继承 单一继承和多重继承。 对于单一继承 滚动条」 派生类只能有一个基类; 对于多重继承 可滚动的窗口 派生类可以有多个基类。 多重继承
4.1 派生类的概念 4.1.1 为什么要使用继承 从现有类出发建立新的类,使新类继承老类的特点和功能,并 且又加上自己的特点和功能的程序设计方法,是面向对象程序设 计一个重要的技术。 老的类叫基类,新的类叫派生类。 对派生类可做如下几种变化: (1) 可以增加新的成员数据。 (2) 可以增加新的成员函数。 (3) 可以重新定义己有的成员函数。 (4) 可以改变现有成员的属性。 C++中有两种继承: 单一继承和多重继承。 对于单一继承 派生类只能有一个基类; 对于多重继承 派生类可以有多个基类。 昆 虫 有 翅 类 无 翅 类 蛾 苍蝇 蝴蝶 单一继承 继 承 派 生 窗 口 滚 动 条 可滚动的窗口 多重继承 2
411.什么要使用继承? class person( class employee private private char name[101 char name[101 Int age; int age; char sex: char sex char public department 20: void printo float salary; public void print(; 比较二个类
4.1.1为什么要使用继承 ? class person{ private: char name[10]; int age; char sex; public: void print(); }; 比较二个类 class employee{ private: char name[10]; int age; char sex; char department[20]; float salary; public: void print(); }; 3
412派生类的声明 基类: 声明派生类: class类名 class 派生类名:派生方式基类名 类的内容 /派生类新增的数据成员和函数成员 派生方式可为公有派生(用 public)和私有派生(用 private或缺省)。 class persont class employee: public person i private: char name[ 10l; p rivate. int age; char department 20 char sex float salary; public public void printO void printo;
4.1.2 派生类的声明 基类: class 类名 { 类的内容 }; 派生方式可为公有派生(用public)和私有派生(用private或缺省)。 class person{ private: char name[10]; int age; char sex; public: void print(); }; 声明派生类: class 派生类名 : 派生方式 基类名 { //派生类新增的数据成员和函数成员 }; class employee : public person { private: char department[20]; float salary; public: void print(); }; 4
私有派生 (1)私有派生类对基类成员的访问 基类的公有成员相当于派生类的私有成员,派生类的成员数 可以访问它。但基类的私有成员派生类的成员函数不可以访问它。 例41 #include <iostream. h> void maino class baset 定义基类 int x; i derived obj; public obj. setxy(10, 20) void setx( int n)ix-n; void showxoi cout <<x<< endl obj. showy; class derived: private base定义私有派生类 int public void setxy(int n, int m i setx(o);y=m;) void showy cout<<x<y<endl;}∥非法不能访问x,改为 show0
1. 私有派生 (1) 私有派生类对基类成员的访问 基类的公有成员相当于派生类的私有成员,派生类的成员数 可以访问它。但基类的私有成员派生类的成员函数不可以访问它。 例4.1 #include <iostream.h> class base{ //定义基类 int x; public: void setx(int n) { x=n; } void showx() { cout << x << endl; } }; class derived : private base { //定义私有派生类 int y; public: void setxy(int n, int m) { setx(n); y=m; } void showxy() { cout << x << y << endl; } // 非法 不能访问 x ,改为 showx() }; void main() { derived obj; obj.setxy(10,20); obj.showxy(); } 5