C++程序设计-华南理工大学 第11章_多态性和虚函数的应用与讨论(2)
时间:2025-07-04
时间:2025-07-04
C++程序设计-华南理工大学
多态性和虚函数( ) 第十一章 多态性和虚函数(2) 应用与讨论
面向对象程序设计(C++) 面向对象程序设计
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.8 构造抽象接口多态性的优点之一
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.8.1 问题描述传达员: 下午在会议 室开会!
项目规划 …
公司发 展策略
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.8.2 静态绑定下的实现传达员只负责通知某时某地开会,至于开什么会,怎么开, 传达员只负责通知某时某地开会,至于开什么会,怎么开, 他才不管呢。 他才不管呢。 然而实现时,程序员必须分清楚通知的对象是谁? 然而实现时,程序员必须分清楚通知的对象是谁?然后决 定应该调用那一个对象的“开会函数” 定应该调用那一个对象的“开会函数”。
switch(emp_type) { case “CTO”: ((CTO_manager *)emp)-> meeting(); break; case “Chair”: ((Chair_manager *)emp)->meeting(); break; default: ERROR(); }《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》 4
C++程序设计-华南理工大学
11.8.3 动态绑定下的实现
传达员: 下午在会 议室开会!
项目规 划
…
公司 发展 策略
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.8.3 动态绑定下的实现 续) 动态绑定下的实现(续CTO cto; Manager * pman ; pman = &cto; // 把所有的派生类对象当成基类处理 pman -> meeting() ; // 通过抽象接口实现
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.9 提高模块的独立性多态性的优点之二: 多态性的优点之二:可扩展性好
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.9.1 静态绑定下的扩充讨论: 当需求发生变化时, 如何修改代码? 讨论: 当需求发生变化时, 如何修改代码? 设置line的type时必须问一下:“嘿, 我可以设成L么? 设置line type时必须问一下 line的 时必须问一下: 我可以设成L 修改enum shape_type = {P,C,Y,L}; 修改enum {P,C,Y,L 定义Line类; 定义Line Line类 修改函数 draw_all(),由于switch逻辑的存在,因此代 draw_all(),由于switch逻辑的存在 由于switch逻辑的存在, 码的修改量是呈组合数量级增长的。 组合数量级增长的 码的修改量是呈组合数量级增长的。 因此,可扩展性很不好! 因此,可扩展性很不好!
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
11.9.2 动态绑定下的扩
充现在要增加类Line,只需要: 现在要增加类Line,只需要: Line,只需要 从基类Shape中派生出Line Shape中派生出Line类 ① 从基类Shape中派生出Line类; 无需设置类型域, ② 无需设置类型域,无需改变其它任何的代码!
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
增加line类 类 增加 class Line : public Shape { public: Line( Point s,Point e ):start(s),end(e); void setLine( int, int, int , int ); int getX1() const { return x1; } int getY1() const { return y1; } int getX2() const { return x2; } int getY2() const { return y2; } virtual void printShapeName() const { cout << “Line: "; } virtual void draw(); protected: Point start, end; };《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》 10
C++程序设计-华南理工大学
修改main()函数 (没有任何变化 函数 没有任何变化 没有任何变化) 修改 int main() { Point point1( 7, 11 ); // create a Point Circle circle1( 3.5, 22, 8 ); // create a Circle Cylinder cylinder1( 10, 3.3, 10, 10 ); // create a Cylinder Circle circle2(2.5,10,15); //create a Circle Shape *arrayOfShapes[ 5 ]; // array of base-class pointers arrayOfShapes[ 0 ] = &point1; arrayOfShapes[ 1 ] = &circle1; arrayOfShapes[ 2 ] = &cylinder1; arrayOfShapes[ 3 ] = &cycle2; for(int i=0; i<4; i++){ arrayofShapes[i]->draw(); // 动态关联 } }《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》 11
C++程序设计-华南理工大学
也就是说, 也就是说,假如只是增加类 Line,而没有创建 , 该类的对象,程序不需要做任何其它修改!! 该类的对象,程序不需要做任何其它修改!!
《面向对象程序设计》 中国科学技术大学计算机系 马建辉 面向对象程序设计》
C++程序设计-华南理工大学
增加Line对象后的 对象后的main()函数 有细微的变化 函数(有细微的变化 增加 对象后的 函数 有细微的变化)int main() { Point point1( 7, 11 ); // create a Point Circle circle1( 3.5, 22, 8 ); // create a Circle Cylinder cylinder1( 10, 3.3, 10, 10 ); // create a Cylinder Circle circle2(2.5,10,15); //create a Circle Line line(7,10,20,25); Shape *arrayOfSha …… 此处隐藏:2730字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:福尼斯焊机故障代码表
下一篇:项目计划进度控制与资源管理