您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > c讲稿第5章继承与派生
《C++面向对象程序设计》2第四章内容4.1什么是运算符重载4.2运算符重载的方法4.3重载运算符的规则4.4运算符重载作为类成员函数和友元函数4.5重载双目运算符4.6重载单目运算符4.7重载流插入运算符和流提取运算符4.8不同类型数据间的转换第5章继承和派生4本章内容5.1继承和派生的概念5.2派生类的声明方法5.3派生类的构成5.4派生类成员的访问属性5.5派生类的构造函数和析构函数5.6多重继承5.7基类和派生类的转换5.8继承与组合5目标理解派生和继承的相关概念;掌握派生类的声明方式掌握派生类的构成和成员的访问属性;掌握派生类构造函数和析构函数的使用方法;掌握多重继承的方法;理解基类和派生类的转换方法;理解继承与组合的含义。65.1继承与派生的概念继承:继承是类之间定义的一种重要关系。人学生老师大学生研究生硕士生博士生专科生本科生在职研究生75.1继承与派生的概念B类继承A类,或称从类A派生出B类,则A类称为基类(父类),类B称为派生类(子类)。人学生老师大学生研究生硕士生博士生专科生本科生在职研究生85.1继承与派生的概念单继承:派生类从一个基类派生的继承关系。多继承:派生类从多个基类派生的继承关系。人学生老师大学生研究生硕士生博士生专科生本科生在职研究生95.1继承与派生的概念例:1、定义一个学生类Student,包括学生和姓名,以及显示信息的函数。2、定义一个大学生类CollegeStudent,包括学生、姓名和专业,以及显示信息的函数。105.1继承与派生的概念classStudent{public:voiddisplay(){coutnum;coutname;}private:intnum;stringname;};classCollegeStudent{public:voiddisplay(){coutnum;coutname;coutspeciality;}private:intnum;stringname;stringspeciality;};能否在定义CollegeStudent时利用Student,而不用重新定义已有的成员?115.2派生类的声明方式声明派生类的一般形式为:class派生类名:[继承方式]基类名{派生类新增成员;}继承方式:public、private和protected,默认为private。125.2派生类的声明方式classCollegeStudent:publicStudent{public:voiddisplay1(){coutspeciality;}private:stringspeciality;};基类的成员在派生类中如何存在?135.3派生类的构成派生类的成员包括从基类继承过来的成员和自己增加的成员两大部分。CollegeStudentintnum;stringname;voiddisplay();stringspeciality;voiddispaly1();Studentintnum;stringname;voiddiaplsy();继承新增145.3派生类的构成派生类的生成过程:1.接收基类成员。派生类接收基类中除构造函数和析构函数之外的全部成员。2.改造基类成员。通过继承方式改造基类成员的访问控制权限;对基类成员进行覆盖,即在派生类中声明一个和基类数据或函数同名的成员。3.添加新的成员。15classStudent{public:Student(intn,stringna){num=n;name=na;}~Student(){}voidinput(){cinnumname;}voiddisplay(){coutnumname;}private:intnum;stringname;};classCollegeStudent:privateStudent{public:voiddisplay(){coutspeciality;}private:stringspeciality;};165.4派生类成员的访问属性(一)公有继承public成员protected成员private成员public成员protected成员private成员基类派生类不可访问17classStudent{public:voiddisplay(){coutnumname;}private:intnum;stringname;};classCollegeStudent:publicStudent{public:voiddisplay1(){coutnumnamespeciality;}private:stringspeciality;};num和name在派生类中不可访问。18classStudent{…};classCollegeStudent:publicStudent{public:voiddisplay1(){coutspeciality;}private:stringspeciality;};voidmain(){CollegeStudents;s.display();s.display1();return0;}195.4派生类成员的访问属性(二)私有继承public成员protected成员private成员public成员protected成员private成员基类派生类不可访问private成员private成员20classStudent{public:voiddisplay(){coutnumname;}private:intnum;stringname;};classCollegeStudent:privateStudent{public:voiddisplay1(){coutspeciality;}private:stringspeciality;};voidmain(){CollegeStudents;s.display();s.display1();s.speciality=“Computer”;return0;}21classStudent{public:voiddisplay(){coutnumname;}private:intnum;stringname;};classCollegeStudent:privateStudent{public:voiddisplay1(){display();coutspeciality;}private:stringspeciality;};voidmain(){CollegeStudents;s.display1();return0;}225.4派生类成员的访问属性(三)保护继承public成员protected成员private成员public成员protected成员private成员基类派生类不可访问protected成员protected成员235.4派生类成员的访问属性(三)保护继承由protected声明的成员称为受保护成员,简称保护成员。在同一类中保护成员和私有成员一样,只能被类内部的成员函数访问,而不能被类外访问。保护成员可以被派生类的成员函数访问。24classStudent{private:intnum;protected:stringname;};classCollegeStudent:protectedStudent{public:voiddisplay(){coutnum;coutname;}};voidmain(){CollegeStudents;s.display();s.name=“Zhang”;return0;}25总结类的成员的访问属性Public:可以再类内通过成员函数来访问,也可以在类外通过对象来访问。Private:只能再类内通过成员函数来访问Protected:只能再类内通过成员函数来访问26总结派生后成员访问属性在派生类中的变化:原来在基类中的访问属性与上继承时的继承方式,即为基类成员在派生类中新的访问属性。Class基类{public:成员j1protected:成员j2private:成员j3};Class派生类:基类{public:成员p1protected:成员p2private:成员p3};public,j1,j227总结派生后成员访问属性在派生类中的变化:原来在基类中的访问属性与上继承时的继承方式,即为基类成员在派生类中新的访问属性。Class基类{public:成员j1protected:成员j2private:成员j3};Class派生类:基类{public:成员p1protected:成员p2private:成员p3};Protected,j2,j128总结派生后成员访问属性在派生类中的变化:原来在基类中的访问属性与上继承时的继承方式,即为基类成员在派生类中新的访问属性。Class基类{public:成员j1protected:成员j2private:成员j3};Class派生类:基类{public:成员p1protected:成员p2private:成员p3};private,j2,j129练习classA//基类{public:inti;protected:voidf2();intj;private:intk;};classB:publicA//public方式{public:voidf3();protected:voidf4();private:intm;};classC:protectedB//protected方式{public:voidf5();private:intn;};30练习例课后第一、二、三、四、五题315.5派生类的构造函数和析构函数(一)简单派生类的构造函数简单派生类只有一个基类,数据成员中不包括基类的对象。简单派生类构造函数的定义形式为:派生类构造函数(总参数列表):基类构造函数(参数列表){派生类中新增数据成员初始化;}32classStu{public:Stu(intn,stringna){num=n;name=na;}protected:intnum;stringname;};classColStu:publicStu{public:ColStu(intn,stringna,strings):Stu(n,na){speciality=s;}voiddisplay(){coutnumnamespeciality;}private:stringspeciality;};335.5派生类的构造函数和析构函数(一)简单派生类的构造函数构造函数的执行顺序:1.基类的构造函数。2.派生类的构造函数。析构函数的执行顺序:1.派生类的析构函数。2.基类的析构函数。34简单派生类的构造函数派生类构造函数(总参数列表):基类构造函数(参数列表){派生类中新增数据成员初始化;}构造函数的执行顺序:1.基类的构造函数。2.派生类的构造函数。析构函数的执行顺序:1.派生类的析构函数。2.基类的析构函数。355.5派生类的构造函数和析构函数(二)有子对象的派生类的构造函数有子对象的派生类是指类的成员包括类的对象。classStu{protected:intnum;stringname;};classColStu:publicStu{public:voiddisplay();private:stringspeciality;Stus;};365.5派生类的构造函数和析构函数(二)有子对象的派生类的构造函数有子对象的派生类构造函数的一般形式为:派生类构造函数(总参数列表):基类构造函数(参数列表),子对象名(参数列表){派生类中新增数据成员初始化;}375.5派生类的构造函数和析构函数(二)有子对象的派生类的构造函数构造函数的执行顺序:1.基类的构造函数。2.子对象的构造函数。3.派生类的构造函数。385.5派生类的构造函
本文标题:c讲稿第5章继承与派生
链接地址:https://www.777doc.com/doc-609393 .html