Схема доступа К элементу в При базовом классе наследовании класса private public protected public К элементу в производном классе недоступен protected public private protected public protected недоступен protected protected private недоступен private private private protected public Пример №6 class Х{ protected: int i; int j; public: void put_ij(int m, int n); int get_i (void); int get_j (void); }; class Y: public X { private: int k; public: int get_k(void); void make_k(void) {k=i+j;} }; class Z: public Y{ public: void f (void); }; void z::f(void) { i=2; j=3; // Есть доступ к i, j }; Изменения: 1. class Z: private Y{ // Есть доступ к i, j из функции z::f 2. class Y: private X { // Нет доступа к i, j из функции z::f К примеру №6 class Х{ protected: int i; int j; public: void put_ij(int m, int n); int get_i (void); int get_j (void); }; class Y: 1) public X 2) private X 3) protected X { private: int k; public: int get_k(void); void make_k(void) {k=i+j;} }; class Z: public Y{ public: void f (void); }; void z::f(void) { i=2; j=3; // 1) Есть доступ к i, j // 2) Нет доступа к i, j // 3) Есть доступ к i, j k=5; }; // Нет доступа к k Примеры class A{}; class B: private A{}; class C: public B { public: A *a; // :: A *a; }; Механизмы раннего и позднего связывания. Статические методы. Метод MOVE – перемещение объекта по экрану Hide(); // рисует объект цветом фона X=NewX; Y=NewY; Draw(); // рисует объект заданным цветом Схема иерархии классов геометрических фигур Класс Фигура (tLocation) { поля: x,y метод Init(InitX, InitY)} Класс Точка (tPoint) { поля: color методы: Init(InitX, InitY, InitC); Move(NewX, NewY); Hide(); Draw(); } Класс Эллипс (tEllipse) { поля: rx, ry методы: Init(InitX, InitY, InitC, Initrx, Initry); Move(NewX, NewY); Hide(); Draw(); } Иерархия: tLocation -> tPoint -> tEllipse Реализация методов MOVE tPoint.Move(…) Hide(); // рисует точку цветом фона X=NewX; Y=NewY; Draw(); // рисует точку заданным цветом tEllipse.Move(…) Hide(); // рисует эллипс цветом фона X=NewX; Y=NewY; Draw(); // рисует эллипс заданным цветом main() { tPoint pp; tEllipse pEl; … pp.Init(); pEl.Init(); … pp.Move(32,43); pEl.Move(15,65); } После компиляции Объект pp X Y Color Init Move Hide Draw tPoint.Init tPoint. Move tPoint. Hide tPoint. Draw Объект pEl X Y Color rx ry Init Move Hide Draw tEllipse.Init tEllipse. Move tEllipse. Hide tEllipse. Draw tPoint.Move tEllipse.Move tPoint.Hide tEllipse.Hide … … tPoint.Draw tEllipse.Draw Реализация методов MOVE main() tPoint.Move(…) tPoint.Hide(); // рисует точку цветом фона { X=NewX; tPoint pp; Y=NewY; tEllipse pEl; tPoint.Draw(); // рисует точку заданным … цветом pp.Init(); pEl.Init(); tEllipse.Move(…) … tEllipse.Hide(); // рисует эллипс цветом pp.Move(32,43); фона pEl.Move(15,65); X=NewX; } Y=NewY; tEllipse.Draw(); // рисует эллипс заданным цветом Из класса tEllipse исключаем метод tEllipse.Move Класс Эллипс (tEllipse) { поля: rx, ry методы: Init(InitX, InitY, InitC); //Move(NewX, NewY); Hide(); Draw(); } Последовательность методов pEl.Move вызовов Объект pEl X Y Color rx ry Init Move Hide Draw tEllipse.Init tPoint. Move tEllipse. Hide tEllipse. Draw tPoint.Move tPoint.Move tPoint.Hide tPoint.Hide … tPoint.Draw tPoint.Draw Виртуальные методы virtual void Show(void); Схема иерархии классов геометрических фигур Класс Фигура (tLocation) { поля: x,y метод Init(InitX, InitY)} Класс Точка (tPoint) { поля: color методы: Init(InitX, InitY, InitC); Move(NewX, NewY); virtual Hide(); virtual Draw(); } Класс Эллипс (tEllipse) { поля: rx, ry методы: Init(InitX, InitY, InitC, Initrx, Initry); virtual Hide(); virtual Draw(); } Иерархия: tLocation -> tPoint -> tEllipse Из класса tEllipse исключаем метод tEllipse.Move Класс Эллипс (tEllipse) { поля: rx, ry методы: Init(InitX, InitY, InitC); //Move(NewX, NewY); Hide(); Draw(); } Последовательность методов pEl.Move вызовов Объект pEl X Y Color rx ry Init Move Hide Draw tEllipse.Init tPoint. Move tEllipse. Hide tEllipse. Draw tPoint.Move tPoint.Move tEllipse.Hide объект.Hide … объект.Draw tEllipse.Draw