Доступ_Виртуальные

advertisement
Схема доступа
К элементу в При
базовом классе наследовании
класса
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
Download