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