9.1面向对象语言的概念 方法选择规则 如果类B继承类A并且重写了方法m,那么对 类B的对象b来说,即使它作为类A的对象使用, 也必须使用在类B中定义的方法m
9 1. 面向对象语言的概念 • 方法选择规则 如果类B继承类A并且重写了方法 并且重写了方法m,那么对 类B的对象b来说, 即使它作为类A的对象使用, 也必须使用在类B中定义的方法m
9.1面向对象语言的概念 9.1.2继承 图形对象的继承层次结构 GraphicalObj translate scale PolyLine translate scale ClosedGraphics length area Ellipse PolyGon translate area scale area Rectangle Triangle area
9 1. 面向对象语言的概念 9.1.2 继承 图形对象的继承层次结构 GraphicalObj translate scale PolyLine translate scale ClosedGraphics … … length A area Ellipse translate PolyGon area … … B scale area area R l Ti l … … B Rectangle area Triangle
9.1面向对象语言的概念 动态绑定规则 当对象o的一个方法可能被子类重新定义时, 如果编译器不能确定o的运行时类型,那么必 须对该方法进行动态绑定 void zoom (GraphicalObj &obj,double zoom factor,Point ¢er){ obj.translate (-center.x,-center.y); /将“中心”移至“点(0,0)” obj.scale(zoom_factor);/缩放
9 1. 面向对象语言的概念 • 动态绑定规则 当对象o的一个方法可能被子类重新定义时, 如果编译器不能确定o的运行时类型,那么必 须对该方法进行动态绑定 void zoom (GraphicalObj &obj double void zoom (GraphicalObj &obj, double zoom_factor, Point ¢er) { obj.translate (center.x, center.y); // 将“中心”移至“点(0 0) ,” obj.scale (zoom_factor); // 缩放 }
9.1面向对象语言的概念 9.1.3信息封装 大多数面向对象语言提供了一种机制,它可 用来将类的特征分成私有的和公共的 某些面向对象语言用不同的上下文区分作用 域,如“在一个类中”、 在派生类中” “在友元类中”等等 由编译器来实现这些作用域规则是简单而又 明显的
9 1. 面向对象语言的概念 9.1.3 信息封装 • 大多数面向对象语言提供了 种机制 大多数面向对象语言提供了一种机制,它可 用来将类的特征分成私有的和公共的 • 某些面向对象语言用不同的上下文区分作用 域,如“在 个类中 一 ”、“在派生类中”、 “在友元类中”等等 • 由编译器来实现这些作用域规则是简单而又 明显的
9.2 方法的编译 先定义一般的图形对象类GraphicalObj如下: class GraphicalObj virtual void translate (double x offset,double y_offset); virtual void scale (double factor); /可能还有一些其它方法
9 2. 方法的编译 先定义一般的图形对象类GraphicalObj如下: class GraphicalObj { class GraphicalObj { virtual virtual void translate translate (double (double x offset, x_offset, double y_offset); virtual void scale (double factor); ... // 可能还有 些其它方法 可能还有一些其它方法 };