预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共63页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

继承和多态应用和示例闫哲yzh@cs.pku.edu.cn2005年6月24日内容†继承的内存布局†赋值相容规则†继承举例†虚函数实现原理†多态性举例†设计模式继承的内存布局†通过继承派生类中包含基类成员classPoint2d{public:Point3dobj2;Point2d(){//…}Point2dobj1;//……floatxfloatxprivate:protected:基类成员floatxy;floatyfloaty};floatzclassPoint3d:publicPoint2d{public:Point3d():Point2d(){//…}//……构造函数和析构函数的调用顺序private:floatz;};访问权限的理解继承的内存布局†对比:对象成员classPoint2d{public:Point2d(){//…}Point2dobj1;Point3dobj2;//……floatxfloatxprotected:pointfloatxy;floatyfloaty对象成员};classPoint3d:{floatzpublic:Point3d():point(){//…}//……private:Point2dpoint;floatz;};赋值相同规则†通过公有继承派生类的对象可以当作基类使用classPoint2d{public:voidshow();Point3dobj3d;protected:Point2dobj2d;floatxy;floatxfloatx};classPoint3d:publicPoint2d{floatyfloatypublic:voidshow();floatzprivate:floatz;};voidmain(){派生类对象赋值给基类对象Point2dobj2d;Point3dobj3d;向上映射、对象切片obj2d=obj3d;//对象赋值obj2d.show();//调用Point2d::show()}赋值相同规则†通过公有继承派生类指针可以赋给基类指针classPoint2d{Point2dobj2d;Point3dobj3d;public:voidshow();p2dp3dprotected:floatxfloatxfloatxy;