资源预览内容
第1页 / 共280页
第2页 / 共280页
第3页 / 共280页
第4页 / 共280页
第5页 / 共280页
第6页 / 共280页
第7页 / 共280页
第8页 / 共280页
第9页 / 共280页
第10页 / 共280页
亲,该文档总共280页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,C语言与程序设计大学教程(下),2,第8章 继承与派生 第9章 关于类和对象的进一步讨论 第10章 运算符重载 第11章 继承与派生 第12章 多态性与虚函数,3,第8章 继承与派生,教学主要内容 继承与派生的概念 派生类的构成 派生类的构造函数与析构函数 重点与难点 派生类的构成 派生类的构造函数,4,第8章 继承与派生,教学目标 (1)熟练掌握继承与派生的概念 (2)掌握派生类的构成 (3)掌握派生类的构造函数,5,第8章 继承与派生,8.1 类的继承与派生 8.2 继承方式与成员访问规则 8.3 派生类的构造函数和析构函数,6,面向对象技术强调软件的可重用性(software reusability) 。C+语言提供了类的继承机制,解决了软件重用问题。 继承性是面向对象程序设计的一种重要功能,是实现代码复用的一种形式。继承可以使程序设计人员在一个已存在类的基础上很快建立一个新的类,而不必从零开始设计新类。新设计类除具有原来类的属性和方法,还可以为新类添加新的属性和方法。,第8章 继承与派生,7,在C+中,在已有类的基础上新增自己的特性而产生新类的过程称为派生。所谓“继承”就是在一个已存在的类的基础上建立一个新的类,即保持已有类的特性。当一个类被其他的类继承时,被继承的类称为基类,又称为父类、超类。继承其他类属性和方法的类称为派生类,又称为子类、继承类。,8.1 类的继承与派生,8,8.1.1 基类与派生类,9,8.1.1 基类与派生类,一个派生类不仅可以从一个基类派生,也可以从多个基类派生。一个派生类有两个或多个基类的称为多重继承。图3给出了多继承的实例 。,10,8.1.2 派生类的定义,【格式】 class 派生类名:继承方式 基类名 派生类新增的数据成员和成员函数; ;,11,派生类的定义实例,例如: class TPerson /定义基类TPerson char name10; int age; char sex; public: void print(); ; class TStudent : public TPerson /派生类TStudent的新成员 int class_no; int score; public: void show_count_sum_avg(); ;,12,派生类的定义,【说明】 从已有类派生出新类时,可以在派生类内完成以下几种功能: (1)增加新的数据成员; (2)增加新的成员函数; (3)重新定义基类中已有的成员函数; (4)改变现有成员的属性。,13,8.1.3 派生类的成员构成,派生类中的成员分为两大部分:一部分是从基类继承来的成员,另一部分是在声明派生类时增加的新成员。每一部分均分别包括数据成员和成员函数。图5 给出了派生类TStudent的成员构成。,14,派生类的成员构成,15,8.2 继承方式与成员访问规则,既然派生类中包含基类成员和派生类自己增加的成员,就产生了这两部分成员的关系和访问属性的问题。派生类对基类成员的访问形式主要有以下两种: (1)内部访问:由派生类中新增成员对基类继承来的成员的访问。 (2)对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。 派生类对基类的继承方式有3种:公有继承方式(public)、私有继承方式(private)和保护继承方式(protected)。 不同继承方式的影响主要体现在: (1)派生类成员对基类成员的访问控制。 (2)派生类对象对基类成员的访问控制。,16,8.2.1 公用继承(public),当类的继承方式为public(公有)继承时,基类的public成员和protected成员被继承到派生类中仍作为派生类的public成员和protected成员,派生类的其他成员可以直接访问它们。但是,类的外部使用者只能通过派生类的对象访问继承来的public成员。 基类的private成员在派生类中仍然是private成员,所以无论是派生类成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问它们。,17,公用继承(public),18,公用继承(public)应用实例,【实例8-2-1】公有继承应用实例。 class TPerson char name10; int age; char sex; public: void Init_Person(char *str,int age1,char s); void print(); ; void TPerson:Init_Person(char *str,int age1,char s) strcpy(name,str); age=age1; sex=s;,19,公用继承(public)应用实例,void TPerson:print() cout“n“name“ “age“ “sex“ “; class TStudent : public TPerson / Public公有继承方式 int class_no; int score; public: void Init_Student(char *str2,int age2,char s2,int c_no,int score1); void show_st(); ; void TStudent:Init_Student(char *str2,int age2,char s2,int c_no,int score1) /在派生类中直接访问基类person的Init_Person()成员函数 Init_Person(str2,age2,s2); class_no=c_no; score=score1; ,20,公用继承(public)应用实例,void TStudent:show_st() print(); cout #include void main() TStudent st; /通过派生类对象st直接访问基类Person的公有成员函数/Init_Person st.Init_Person(“Li Ping“,18,F); st.print(); st.Init_Student(“Li Ping“,18,F,1,98); st.show_st(); ,21,8.2.2 私有继承(private ),当类的继承方式为private(私有)继承时,基类的public成员和protected成员被继承后作为派生类的private成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。 基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。,22,私有继承(private ),23,私有继承(private )应用实例,【实例8-2-2】私有继承应用实例。 class TPerson char name10; int age; char sex; public: void Init_Person(char *str,int age1,char s); void print(); ; void TPerson:Init_Person(char *str,int age1,char s) strcpy(name,str); age=age1; sex=s; ,24,私有继承(private )应用实例,void TPerson:print() cout“n“name“ “age“ “sex“ “; /Private私有继承方式 class TStudent : private TPerson int class_no; int score; public: void Init_Student(char *str2,int age2,char s2,int c_no,int score1); void show_st(); ;,25,私有继承(private )应用实例,void TStudent:Init_Student(char *str2,int age2,char s2,int c_no,int score1) Init_Person(str2,age2,s2); class_no=c_no; score=score1; void TStudent:show_st() print(); coutclass_no“ “scoreendl; ,26,私有继承(private )应用实例,#include #include void main() TPerson p; TStudent st; /通过派生类对象只能访问本类成员函数 p.Init_Person(“Li Ping“,18,F); p.print(); st.Init_Student(“Li Ping“,18,F,1,98); st.show_st(); ,27,8.2.3 保护继承(protected),当类的继承方式为protected(保护)继承时,基类的public成员和protected成员被继承到派生类中都作为派生类的protected成员,派生类的其他成员可以直接访问它们,但是类的外部使用者不能通过派生类的对象来访问它们。 基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问基类的private成员。,28,保护继承(protected),29,保护继承(protected)应用实例,【实例8-2-3】 在派生类中引用保护成员。 #include #include class Student /声明基类 public: /基类公用成员 void display( ); protected : /基类保护成员 int num;string name;char sex; ; void Student:display( ) /定义基类成员函数 cout“num:“numendl; cout“name:“nameendl; cout“sex:“sexendl; ,30,保护继承(protected)应用实例,/用protected方式声明派生类Student1 class Student1: protected Student public: void display1( ); /派生类公用成员函数 private: int age; /派生类私有数据成员 string addr; /派生类私有数据成员 ; void Student1:display1( ) /定义派生类公用成员函数 cout“num:“numendl; cout“name:“nameendl; cout“sex:“sexendl; cout“age:“ageendl; cout“address:“addrendl; ,31,保护继承(protected)应用实例,void main( ) Student1 stud1; /stud1是派生类Student1类的对象 /合法,display1是派生类中的公用成员函数 stud1.display1( ); /错误,外界不能访问保护成员 / stud1.num=100
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号