C++程序设计教程 第7讲:继承与派生
C++程序设计教程 第7讲: 继承与派生
引言 继承: inheritance 用现有的类建立新类,在新类中继承了现有类 的属性和行为,新类还可以对这些行为和属性 进行修饰。 现有的类--基类 Base class 新类--派生类 Derived class A A B ABC 基类A 派生类B 派生类C
C 引言 继承:inheritance 用现有的类建立新类,在新类中继承了现有类 的属性和行为,新类还可以对这些行为和属性 进行修饰。 现有的类 --- 基类 Base class 新类 --- 派生类 Derived class。 A B A B A 基类 A 派生类 B 派生类 C
基类和派生类 有关继承的例子 t Student CommuterStudent Residentstudent Shape> Circle/Triangle Rectangle Loan Carloan / HomelmprovementLoan MortgageLoan Employee Faculty Member /StaffMember Account> CheckingAccount SavingsAccount
基类和派生类 有关继承的例子: Student → CommuterStudent / ResidentStudent Shape → Circle / Triangle / Rectangle Loan → Carloan / HomeImprovementLoan / MortgageLoan Employee → FacultyMember / StaffMember Account → CheckingAccount / SavingsAccount
基类和派生类 继承的层次结构 CommunityMember Employee Student Faculty Staff Administrator Teacher
基类和派生类 继承的层次结构 CommunityMember Employee Student Faculty Staff Administrator Teacher
基类和派生类 继承的层次结构 Shape TwoDimShape ThreeDim Shape Circle Sphere Square Cube Triangle Tetrahedron
基类和派生类 继承的层次结构 Shape TwoDimShape ThreeDimShape Circle Square Triangle Sphere Cube Tetrahedron
基类和派生类 公有继承 public inheritance class CommissionWorker: public Employee {… public public protected protected private public Base Class protected Derived Class private
基类和派生类 公有继承 public inheritance class CommissionWorker : public Employee { … }; public: protected: private: public: protected: private: public: protected: private: Base Class Derived Class
受保护的成员 1)公有成员可以被外部访问,也可以被继承 2)私有成员不能被外部访问,也不能被继承; 3)受保护的成员不能被外部访问,但可以被继承。 把基类指针强制转换为派生类指针 公有派生类的对象可作为(|pobe 其相应基类的对象处理 protected 派生类指针 基类指针范围 范围 public protected private
受保护的成员 1) 公有成员可以被外部访问,也可以被继承; 2) 私有成员不能被外部访问,也不能被继承; 3) 受保护的成员不能被外部访问,但可以被继承。 把基类指针强制转换为派生类指针 公有派生类的对象可作为 其相应基类的对象处理。 public: protected: private: public: protected: private: 派生类指针 范围 基 类 指 针 范 围
使用成员函数 派生类可以访问基类的公有成员和受保护成员。 派生类不能访问基类的私有成员。 在派生类中重定义基类成员 派生类可以重新定义基类的成员函数。(重载) 在派生类引用该函数时,会首先调用派生类中的版 本 class Employee class Hourly Worker void printo const void print() const base class derived class
使用成员函数 派生类可以访问基类的公有成员和受保护成员。 派生类不能访问基类的私有成员。 在派生类中重定义基类成员 派生类可以重新定义基类的成员函数。(重载) 在派生类引用该函数时,会首先调用派生类中的版 本。 class Employee void print() const base class class HourlyWorker void print() const derived class
公有的、受保护的和私有的基类 继承有三种:公有、受保护和私有继承 公有继承 基类的 public成为派生类的 public 基类的 protected成为派生类的 protected 受保护继承 基类的 public和 protected成为派生类的 protected 私有继承: 基类的 public和 protected成为派生类的 private 直接基类和间接基类 直接基类是直接派生而来,间接基类则是经过多层次派生 得到的
公有的、受保护的和私有的基类 继承有三种:公有、受保护和私有继承。 公有继承: 基类的public成为派生类的public。 基类的protected成为派生类的protected。 受保护继承: 基类的public和protected成为派生类的protected。 私有继承: 基类的public和protected成为派生类的private 直接基类和间接基类 直接基类是直接派生而来,间接基类则是经过多层次派生 得到的
公有继承举例7-1 c1 ass Point//基类 Point类的声明 pub1ic://公有函数成员 void InitP(float xx=0, float yy=0) I X= xx, Y= yYi void Move(float xoff, float yoff [ x+= xOff; Y + yoff; j float Getxo[ return xi float Getyo return Yi private://私有数据成员 float XY
公有继承举例 7-1 class Point //基类Point类的声明 { public: //公有函数成员 void InitP(float xx=0, float yy=0) { X = xx; Y = yy; } void Move(float xOff, float yOff) { X += xOff; Y += yOff; } float GetX() { return X; } float GetY() { return Y; } private: //私有数据成员 float X,Y; };