Составители:
Рубрика:
52
Квалифицированное имя компонента класса может быть использо-
вано и вне его компонентных функций. Для доступа в таком случае
можно использовать выражение вида
имя_объекта . имя_класса :: имя_компонента
//Листинг 21. Пример использования квалифицированного имени компонент класса
из
//его окружения:
main()
{ C c;
c.C::c2=0;
c.B::funcB();
c.A::a2=2;
c.C::funcA();
}
Поиск компонента при обращении к нему всегда идет "снизу-вверх". Для
вызова с.С::funcA() транслятор сначала проверит наличие функции funcA в классе
С и, если такой имеется, занесет адрес метода этого класса для вызова. Если в
классе С нет метода с таким названием, будет рассмотрен прямой базовый класс
для С (
в нашем случае – класс В) и поиск метода продолжится в нем. Если метод с
таким именем будет найден – его адрес будет помещен на место вызова, иначе –
поиск будет продолжен на следующем уровне иерархии классов (в классе А для
рассматриваемого примера).
Еще одно важное свойство базовых и производных классов
иллюстрируется в листинге
22.
//Листинг 22. Приведение указателей производного класса к базовому
main()
{A *pta;
C c;
pta=&c;
pta->funcA();
}
.
В программе определен указатель на базовый класс A и объект
производного класса С. При этом присвоение указателю pta адреса объекта c не
потребовало операций приведения типа.
Данный пример показывает, что
указатель на базовый класс может ссылаться на объекты производных классов.
Квалифицированное имя компонента класса может быть использо-
вано и вне его компонентных функций. Для доступа в таком случае
можно использовать выражение вида
имя_объекта . имя_класса :: имя_компонента
//Листинг 21. Пример использования квалифицированного имени компонент класса
из
//его окружения:
main()
{ C c;
c.C::c2=0;
c.B::funcB();
c.A::a2=2;
c.C::funcA();
}
Поиск компонента при обращении к нему всегда идет "снизу-вверх". Для
вызова с.С::funcA() транслятор сначала проверит наличие функции funcA в классе
С и, если такой имеется, занесет адрес метода этого класса для вызова. Если в
классе С нет метода с таким названием, будет рассмотрен прямой базовый класс
для С (в нашем случае – класс В) и поиск метода продолжится в нем. Если метод с
таким именем будет найден – его адрес будет помещен на место вызова, иначе –
поиск будет продолжен на следующем уровне иерархии классов (в классе А для
рассматриваемого примера).
Еще одно важное свойство базовых и производных классов
иллюстрируется в листинге 22.
//Листинг 22. Приведение указателей производного класса к базовому
main()
{A *pta;
C c;
pta=&c;
pta->funcA();
}.
В программе определен указатель на базовый класс A и объект
производного класса С. При этом присвоение указателю pta адреса объекта c не
потребовало операций приведения типа. Данный пример показывает, что
указатель на базовый класс может ссылаться на объекты производных классов.
52
Страницы
- « первая
- ‹ предыдущая
- …
- 50
- 51
- 52
- 53
- 54
- …
- следующая ›
- последняя »
