C++程序设计基础(第5版)(上)周霭如【8 继承】

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

华南理工大学计算机学院周霭如2016华南理工大学计算机学院周霭如2016第8章继承8.1类之间的关系8.2基类和派生类8.3基类的初始化8.4继承的应用实例8.5多继承小结华南理工大学计算机学院周霭如20168.1类之间的关系has-A,uses-A和is-Ahas-A包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。uses-A一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友元或对象参数传递实现。is-A机制称为“继承”。关系具有传递性,不具有对称性。华南理工大学计算机学院周霭如20168.1类之间的关系不具有对称性不是所有植物都属于蕨类传递性高等植物、蕨类植物、芒萁都是植物,具有植物的共同特征植物低等植物高等植物藻类菌类地衣类苔藓类蕨类裸子类被子类地钱小金发草毛蕨芒萁杉木柏木荔枝橘子华南理工大学计算机学院周霭如20168.1类之间的关系继承是类之间定义的一种重要关系一个B类继承A类,或称从类A派生类B类A称为基类(父类),类B称为派生类(子类)AB1B2C1C2C3B1,B2的基类A的派生类C1,C2,C3的基类A的派生类(单继承)C3的基类B1,B2的派生类(多继承)B1的派生类华南理工大学计算机学院周霭如2016华南理工大学计算机学院周霭如2016类继承关系的语法形式class派生类名:基类名表{数据成员和成员函数声明};8.2基类和派生类华南理工大学计算机学院周霭如2016类继承关系的语法形式class派生类名:基类名表{数据成员和成员函数声明};8.2基类和派生类基类名表构成访问控制基类名1,访问控制基类名2,…,访问控制基类名n华南理工大学计算机学院周霭如2016类继承关系的语法形式class派生类名:基类名表{数据成员和成员函数声明};8.2基类和派生类基类名表构成访问控制基类名1,访问控制基类名2,…,访问控制基类名n访问控制表示派生类对基类的继承方式,使用关键字:public公有继承private私有继承protected保护继承华南理工大学计算机学院周霭如2016派生类对基类成员的使用,与继承访问控制和基类中成员性质有关公有继承基类的公有成员派生类的公有成员基类的保护成员派生类的保护成员私有继承基类的公有成员和保护成员派生类的私有成员保护继承基类的公有成员和保护成员派生类的保护成员不论种方式继承基类,派生类都不能直接使用基类的私有成员8.2.1访问控制8.2.1访问控制华南理工大学计算机学院周霭如20168.2.1访问控制1.公有继承public成员public成员protected成员protected成员private成员public成员protected成员private成员基类派生类华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;classA{public:voidget_XY(){coutEntertwonumbersofx,y:;cinxy;}voidput_XY(){coutx=x,y=y'\n';}protected:intx,y;};classB:publicA{public:intget_S(){returns;};voidmake_S(){s=x*y;};//使用基类数据成员x,yprotected:ints;};classC:publicB{public:voidget_H(){coutEnteranumberofh:;cinh;}intget_V(){returnv;}voidmake_V(){make_S();v=get_S()*h;}//使用基类成员函数protected:inth,v;};例8-1公有继承的测试华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;classA{public:voidget_XY(){coutEntertwonumbersofx,y:;cinxy;}voidput_XY(){coutx=x,y=y'\n';}protected:intx,y;};classB:publicA{public:intget_S(){returns;};voidmake_S(){s=x*y;};//使用基类数据成员x,yprotected:ints;};classC:publicB{public:voidget_H(){coutEnteranumberofh:;cinh;}intget_V(){returnv;}voidmake_V(){make_S();v=get_S()*h;}//使用基类成员函数protected:inth,v;};classAclassC:publicBclassB:publicA8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016#includeiostreamusingnamespacestd;classA{public:voidget_XY(){coutEntertwonumbersofx,y:;cinxy;}voidput_XY(){coutx=x,y=y'\n';}protected:intx,y;};classB:publicA{public:intget_S(){returns;};voidmake_S(){s=x*y;};//使用基类数据成员x,yprotected:ints;};classC:publicB{public:voidget_H(){coutEnteranumberofh:;cinh;}intget_V(){returnv;}voidmake_V(){make_S();v=get_S()*h;}//使用基类成员函数protected:inth,v;};classAclassC:publicYclassB:publicX保护数据成员在类层次中可见8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}objA.yobjA.xobjAxy8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}objA.yobjA.xobjAxyobjB.sobjB.yobjB.xobjBs8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBxysobjC.hobjC.vobjC.sobjC.yobjC.xobjChv8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC对objA的数据成员操作xyshv8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用基类A成员函数对objB的数据成员操作xyshv8.2.1访问控制例8-1公有继承的测试华南理工大学计算机学院周霭如2016intmain(){AobjA;BobjB;CobjC;coutItisobject_A:\n;objA.get_XY();objA.put_XY();coutItisobject_B:\n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:\n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用派生类B成员函数对objB的数据成员操作xyshv8.2.1

1 / 127
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功