
- •Оглавление
- •Об авторе
- •Посвящение
- •Благодарности
- •Ждем ваших отзывов!
- •Что такое .NET
- •Создание исходной программы
- •Тестовая поездка
- •Каркас программы
- •Комментарии
- •Введение в хитрости панели элементов
- •Повторное использование кода из панели элементов
- •Правила объявления переменных
- •Вариации на тему int
- •Объявление переменной с плавающей точкой
- •Ограничения переменных с плавающей точкой
- •Объявление переменных типа decimal
- •Сравнение десятичных и целых чисел, а также чисел с плавающей точкой
- •Логичен ли логический тип
- •Символьные типы
- •Что такое тип-значение
- •Неизменяемость строк
- •Основные операции над строками
- •Сравнение строк
- •Сравнение без учета регистра
- •Отличие строк в разных регистрах
- •Преобразование символов строки в символы верхнего или нижнего регистра
- •Поиск в строках
- •Как искать
- •Пуста ли строка
- •Удаление пробельных символов
- •Анализ числового ввода
- •Обработка последовательности чисел
- •Объединение массива строк в одну строку
- •Арифметика
- •Простейшие операторы
- •Порядок выполнения операторов
- •Оператор инкремента
- •Сравнение чисел с плавающей точкой
- •Составные логические операторы
- •Вычисление типа операции
- •Типы при присваивании
- •Перегрузка операторов
- •Ветвление с использованием if и switch
- •Инструкция if
- •Инструкция else
- •Как избежать else
- •Вложенные инструкции if
- •Конструкция switch
- •Циклы
- •Цикл без счетчика
- •Правила области видимости
- •Пример
- •Зачем нужны разные циклы
- •Зачем нужны массивы
- •Массив фиксированного размера
- •Массив переменного размера
- •Свойство Length
- •Инициализация массивов
- •Понятие <т>
- •Обобщенные коллекции
- •Инстанцирование пустого списка
- •Создание списка целых чисел
- •Преобразования списков в массивы и обратно
- •Подсчет количества элементов в списке
- •Поиск в списках
- •Инициализаторы массивов и коллекций
- •Выполнение специфичных для множеств задач
- •Создание множества
- •Добавление элемента в множество
- •Выполнение объединения
- •Пересечение множеств
- •Получение разности
- •Не используйте старые коллекции
- •Обход каталога файлов
- •Начало программы
- •Получение начальных входных данных
- •Создание списка файлов
- •Форматирование вывода
- •Вывод в шестнадцатеричном формате
- •Обход коллекций: итераторы
- •Доступ к коллекции: общая задача
- •Использование foreach
- •Формат индексатора
- •Блок итератора
- •Создание каркаса блока итератора
- •Итерирование дней в месяцах
- •Что же такое коллекция
- •Синтаксис итератора
- •Блоки итераторов произвольного вида и размера
- •Обобщенные классы безопасны
- •Обобщенные классы эффективны
- •Очередь с приоритетами
- •Распаковка пакета
- •Написание обобщенного кода
- •Использование простого необобщенного класса фабрики
- •Незавершенные дела
- •Ковариантность
- •Использование механизма исключений для сообщения об ошибках
- •Что происходит при генерации исключения
- •Исключительный пример
- •Что делает этот пример "исключительным"
- •Трассировка стека
- •Советы по написанию кода с хорошей обработкой ошибок
- •Анализ возможных исключений метода
- •Как выяснить, какие исключения генерируются теми или иными методами
- •Генерирующие исключения выражения
- •Работа с перечислениями
- •Создание перечислений с инициализаторами
- •Указание типа данных перечисления
- •Применение перечислений в конструкции switch
- •Процедурные поездки
- •Объектно-ориентированные поездки
- •Определение класса и объекта
- •Определение класса
- •Что такое объект
- •Различие между объектами
- •Работа со ссылками
- •Классы, содержащие классы
- •Определение константных членов-данных и членов-данных только для чтения
- •Передача аргументов методу
- •Передача методу нескольких аргументов
- •Соответствие определений аргументов их использованию
- •Перегрузка методов
- •Реализация аргументов по умолчанию
- •Возврат значения оператором return
- •Кортеж с двумя элементами
- •Создание кортежей более чем с двумя элементами
- •Глава 14 Поговорим об этом
- •Определение методов
- •Определение статического метода
- •Определение метода экземпляра
- •Полное имя метода
- •Ключевое слово this
- •Когда this используется явно
- •Что делать при отсутствии this
- •Использование локальных функций
- •Прочие уровни безопасности
- •Методы доступа
- •Пример управления доступом
- •Выводы
- •Статические свойства
- •Побочные действия свойств
- •Дайте компилятору написать свойства для вас
- •Методы и уровни доступа
- •Замена конструктора по умолчанию
- •Конструирование объектов
- •Непосредственная инициализация объекта
- •Конструирование с инициализаторами
- •Инициализация объекта без конструктора
- •Определение свойств с кодом
- •Определение конструкторов и деструкторов с кодом
- •Определение методов доступа к свойствам с кодом
- •Определение методов доступа к событиям с кодом
- •Наследование класса
- •Более сложный пример наследования
- •ЯВЛЯЕТСЯ или СОДЕРЖИТ
- •Доступ к BankAccount через содержание
- •Отношение СОДЕРЖИТ
- •Заменяемость классов
- •Неверное преобразование времени выполнения
- •Указание конкретного конструктора базового класса
- •Обновленный класс BankAccount
- •Перегрузка унаследованного метода
- •Простейший случай перегрузки метода
- •Различные классы, различные методы
- •Сокрытие метода базового класса
- •Вызов методов базового класса
- •Что неверно в стратегии использования объявленного типа
- •Использование is для полиморфного доступа к скрытому методу
- •Объявление метода виртуальным и перекрытие
- •Получение максимальной выгоды от полиморфизма
- •Разложение классов
- •Абстрактный класс: ничего, кроме идеи
- •Как использовать абстрактные классы
- •Создание абстрактных объектов невозможно
- •Опечатывание класса
- •Реализация интерфейса
- •Именование интерфейсов
- •Наследование и реализация интерфейса
- •Преимущества интерфейсов
- •Тип, возвращаемый методом
- •Что скрыто за интерфейсом
- •Гибкие зависимости через интерфейсы
- •Реализация отношения СОДЕРЖИТ с помощью интерфейсов
- •Определение делегата
- •Пример передачи кода
- •Делегирование задания
- •Очень простой первый пример
- •Более реальный пример
- •Создание приложения
- •Жизненный цикл делегата
- •Анонимные методы
- •Проектный шаблон Observer
- •Что такое событие. Публикация и подписка
- •Как издатель оповещает о своих событиях
- •Как подписаться на событие
- •Как опубликовать событие
- •Как наблюдатели "обрабатывают" событие
- •Сборки
- •Выполнимые файлы
- •Библиотеки классов
- •Создание проекта библиотеки классов
- •Создание автономной библиотеки классов
- •Создание классов для библиотеки
- •Использование тестового приложения
- •Дополнительные ключевые слова для управления доступом
- •protected: поделимся с подклассами
- •protected internal: более изощренная защита
- •Размещение классов в пространствах имен
- •Объявление пространств имен
- •Пространства имен и доступ
- •Использование полностью квалифицированных имен
- •Ссылочные типы
- •Выходные параметры
- •Альтернативные методы возврата значений
- •Работа с переменными out
- •Возврат значений по ссылке
- •Различия типов-значений
- •Когда следует использовать структуры
- •Добавление распространенных элементов структур
- •Управление отдельной записью
- •Добавление структур в массивы
- •Перекрытие методов
- •Определение того, что следует защищать
- •Документирование компонентов программы
- •Разложение компонентов на функции
- •Оценка рисков
- •Аутентификация с использованием входа в Windows
- •Безопасность развертывания
- •Уязвимости сценариев
- •Наилучшие методы защиты приложений Web Forms
- •Получение данных
- •Настройка образца схемы базы данных
- •Подключение к источнику данных
- •Работа с визуальными инструментами
- •Написание кода для работы с данными
- •Использование Entity Framework
- •Где водится рыба: файловые потоки
- •Потоки
- •Читатели и писатели
- •Пример использования потока
- •Как это работает
- •Наконец-то мы пишем!
- •Использование конструкции using
- •Загрузка файла из Интернета
- •Регистрация сетевой активности
- •Графика
- •Перья
- •Кисти
- •Текст
- •Классы рисования и каркас .NET
- •Приступая к работе
- •Настройка проекта
- •Обработка счета
- •Создание подключения к событию
- •Рисование доски
- •Запуск новой игры

ЗАПОМНИ!
СОВЕТ
dЕВPСИСИОМС!!НОPНСВВИОPО ОBВМЕВhИЕТЕТВl ):СО ИВ ЕНОМСО):МСВСЕТh hВМПЕТЗ!СП СОНB9ИС М!ОМОBМСaНВС!ОИЕТВСИЕТПООС! e!ОaЕТЕСВС ВPО ИСОВtИОМС!BОBЕТВPhСВСЕОООВНtПНЕТМИЕТtСВСПОЕТhВМСaaООnВОtИЕТБ ОЕЕТBОПB
:! ВaЕТСЕЕТМСЕТa ОBЕТСМСЕТОB,ВПСИО ОНЕТВИСЕТНОaСИИ ОP ЕНОPНСВЕТНОh aСИЕТЕТОЕТЕТЕНОМСОСЕТОЕТnСЗИСНВПОВВИО!С ОСОСaСС!ЕНВО!ОhСВИЕТ ОСИОЕВИЕТ! :9м i oP c 9ОИСПОeПОPОС):СО ЕТВВС МВЕТМЕТИСООB BВn ПОЕТВСИЕТЗB !НЕТВВИЕТС ИСМЕТВООa ИЕТВB
B r ММЧД! e1Rn1 КИeЧМrИ 1 n 3CRМИRЕТВR
nЕТП:e НВСЕТНВСn НЕТОaОnВОtИОМСВЗЕТНСnНСBОССИИЕТБОЕЕТ!ОООВНtПЕТИСct МЕТВ ОИЕТЕТaС c
Заменяемость классов
Н) !ankA)(. . .!F#, |
,-0!3 |
6C! 7(,6 |
!1r#., |
n!...(--( |
,(. |
# 72 C!7 !-1 u#-, |
|||||
7.1 |
#,-1 |
..1 |
!1r# .,( |
1(C!7!ankA!..(--(c tr у1F#2 .!ankA.,7,.#,6 |
r,1 .! (х #nх,W 7 |
||||||
!.(!. |
|
,C 0),.#) |
!7c |
i |
< |
<ЧВ |
.i!ьF#, |
0#) #.(7(,6 |
!1r#., |
У юэunрttiкunЧ |
|
7 .# ,!. |
|
ю |
<t<Чдi |
ю |
.!, |
С!)2i |
!F,.(#, |
!1r#., |
Уunрt tiкunЧtrcу.2! F#,# |
||
-.#.( |
,6 |
r,! |
0)#!1)(C!7((,# |
1!3## |
17(2. |
|
|
|
Ч ц
Зф
|
u |
|
|
|
ф |
|
|
|
|
|
|
|
|
|
|
|
|
|
trn#)7!iу |
-,)!. |
|
# !1r#., |
|
У |
эюunрtt iкunЧ-!g)((1# |
,-1 |
7 n#) #.#((!i |
,, n( |
|||||||||
УunрtiкunЧыО |
7 |
n!.(1 |
#, |
(#! 1g! .,.!# |
0)#!1)( |
C!7 ((, # 7.#-,! |
7(-Т trу7,! |
|||||||||||
)!i |
-,)!. # 17(2. |
|
!1)(C!. |
,-n!36 |
C!7(( |
!0#)( ,!) |
n),7 |
#. #(,1 |
,, |
0(Т |
|
|||||||
Н ! -.# .(,# |
|
.7 |
# |
-, )!., |
0) #!1)( C1W, |
!1 r#. , |
,,n( |
|
|
У unрt |
к uЧn7 |
|||||||
У |
эюunрttiкunЧtrc у.!2 F#,# |
72 n!. ( ,,6 |
r |
!0#)(х,W |
17 (!С |
(! |
О |
(# |
-.#3(#, |
|||||||||
## 7.# -,! |
7(-c |
|
,! 7-# )(7(! |
B,! |
n2 , (,6-1 |
0)#!1) |
(C! |
7(,6 |
1! |
.6i,i |
B, -.!7!i |
|||||||
,,0i |
,(.!i |
.(. |
ьiк |
<С7 .#(6i,iС |
,(.!i |
.(. |
гiУЧОc |
(# |
.#.(#, |
r,!ankA!(#1 7(!С |
||||||||
0!,!.1 |
B,! |
r,! |
.! |
F#, |
0), |
7!.,,6 |
. 0!,#)# |
.( |
((2gc |
|
|
|
|
|
|
Овr ЧАСТЬ 2 тиъсусномооасн1а ооленнос Сооноеоо аооленас не вп

Отношение Я ВЛЯЕТСЯ не рефлексивно. Следовательно, несмотря на то, что "Запорожец" является автомобилем, автомобиль - не обя зательно "Запорожец". Аналогично BankAccount - не обязательно ЗАПОМНИ! savingsAccount, так что неявное преобразование в этом направле нии запрещено. Последняя строка разрешена, поскольку в ней про граммист явно указывает, что он берет на себя ответственность за
выполнение данного преобразования.
Неверное преобразование времени выполнения
В общем случае приведение объекта от типа B a n kAccount к типу SavingsAccount - достаточно опасная операция. Рассмотрим следующий пример:
т |
:) |
ы |
:):,р ,хр), |
Чр |
им нгоыимnr))р им 'ыимnr))р им , |
||
|
цц |
|
|
: н Т ,,,, |
к ,, " НW |
||
|
'ыимnr))р им к ",т р |
||||||
|
цц |
:им1r))р |
y |
6ы |
:им1r))р |
им : |
|
|
6ы |
им |
ы им:1 r))р |
им= |
=
=
Метод ProcessAccount ( ) выполняет несколько операций, включая вызов метода Accumulateinterest ( ) . Приведение Ьа к типу SavingsAccount необ ходимо, поскольку объект Ьа объявлен как BankAccount. Программа корректно компилируется, так как все преобразования типов выполнены явно.
Все нормально работает при первом вызове ProcessAccount ( ) из Test ( ) . Объект SavingsAccount передается методу ProcessAccount ( ) . Преобразование типа из BankAccount в SavingsAccount не вызывает проблем, поскольку объект Ьа изначально был объектом типа SavingsAccount.
Однако со вторым вызовом ProcessAccount ( ) не все так гладко. Преобра зование в тип SavingsAccount не может быть разрешено. Объект Ьа не имеет метода Accumulateinterest ( ) .
Некорректное преобразование типов генерирует ошибку в процессе выполнения программы (так называемую тнн эsы eг дфддныeхаБддт дlы (run-time error)). Ошибки времени выполнения гораздо сложнее
ВНИМАНИЕ! |
найти и исправить, чем ошибки времени компиляции. Что еще более |
|
ГЛАВА 1 6 Наследование 361

Избеrание неверных преобразований
спомощью оператора is
|
,.". Оу..е6 |
6 ....5р . |
.-.".-Ф .. ."..,..." |
,.Ф. .. |
." |
..,...ц.. |
.." |
||||||||
.,.,.-.... |
|
,. |
". |
,. .,а.....,Фц." |
|
..,,. |
... |
.,9.- |
6n....-. |
.,.,. |
.,. |
||||
.-. ..."Ф...4 |
|
..,"..-б".-.., |
|
..,."..-.Ф.,. |
|
.Ф. 9."." |
|
..- |
.Ф..,..r |
.Ф" |
|||||
.- |
?6 . |
s62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y.,.-.". |
|
|
6."Ф. -,. ". |
,.. . .-.,..., |
Ф,. " |
"-....,..- |
. ... |
. |
.-., |
|||||
..., |
..-."." |
y.,.-.". |
."...-К-,. |
|
..-.,.., |
. |
iеЗ ,.Ф. ... |
..,.,.. |
..."Ф |
||||||
.,... |
". |
, ..- .Ф,.- ."..,.... |
. |
...". |
...-.-e |
.". ".,.-.". |
|
.".." |
..."Фц |
||||||
.".-.4 .Ф. |
|
..".,... |
|
.".. ... |
". |
. ..,"..-.".-... |
.,.,. |
|
,1" ..."Ф.,..,.e |
|
|||||
Д.,....К.. |
|
....,. |
.".." |
." |
.8.4..".-.ц |
. |
....,.,..,. |
|
|
".,.-.".- |
. 6 |
||||
.." |
.".."Ф.. |
|
...,.-.4 |
" .... |
..,.,.. |
..."Ф.,...e |
|
|
|
|
|
|
|||
|
|
|
|
|
|
Ф |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ч |
|
|
|
|
|
|
|
|
|
|
|
гЕ |
. |
..4 |
|
. 1 |
. . |
.. |
.,. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ч |
|
|
|
|
|
|
|
|
Ч
Ч
Ч
Ч
Ч
Ч
|
|
|
Ч |
|
|
|
|
|
|
|
".-.Ф,.., |
.......4.. |
. 6 |
.-,. |
-.-.... |
.." ..,"..-.".-.., |
...,. .. |
||||
."Ф.,." |
."Ф4." |
,.Ф. ". |
,.. |
. s - 1 n....-. . |
.,......,Фц."... |
|
.,,. ... |
|||
.,9.- |
6n....-. |
2Д.. .,..". |
.щ."., .,.".- О |
..е66n...-. |
. . ".,.-.". |
.6 |
.,. |
|||
.,. ..-.,.., |
ру |
е." ... |
..".". |
...".,н |
."..- |
. .,.". ...,. |
.,.,.-. |
". |
,.. |
...e ЧАСТЬ 2 Объектно-ориентированное программирование на С#

|
'i: ет'i: |
|
с'i:о'i:ет етo |
с'i: |
о |
ет'i: |
ет o o в |
oс |
||||
'i: ет |
о 'i:оo 'i: |
o'i:етв |
оoс'i:о'i: 'i:в |
oетв'i: 'i: ет |
||||||||
'i: |
в |
'i: о |
етвет'i: ет |
|
о |
'i: |
с'i:о'i:ет о |
'i: |
ет в |
|||
совет |
oс |
ов |
светв 'i: |
'i:'i: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Избегание неверных преобразований |
|
|
|
|
|
|||||||
с помощью оператора as |
|
|
|
|
|
|
|
|
||||
хъ1.3#1 1.С#3.ъ3 1ъМ9#a |
019#.къ къ4#Зъ1.3#1 |
4ъМ3#п#Тп1.3. |
||||||||||
Т1.къ10Н30З. |
|
#1 З1ъ#С1.ТПъ3#С |
ъ93Мaъп#3. МъСНп 30х МЗ1.п. 1# х10 |
|||||||||
3#4п#Тп1. .ъ3 |
ъМa03.9#ъх1ъ#С1.Т#п.10ъ 1ъ9#11ъ931# |
п4ъМ3#нъ |
||||||||||
1ъ1.ы00 #ь0С90 п1ъ4ъ10пИх#a1ъ10Нх10 0Мх#a |
Т#п.100#СИк1#н#х1ъ#С1. |
|||||||||||
Т#п.10Н |
.9к3# пИ пМънrr#a.г1И х1#пъ1Н3 |
1ъ 1.пъ1 |
a0 1ъТПa |
31..3С#3И |
||||||||
#хъ1.3#1. ММИa9ъ |
|
|
|
|
|
|
|
|
|
|||
|
|
ь |
е |
|
|
|
|
|
|
|
|
|
|
|
|
ь |
ть |
|
е |
а |
|
|
|
|
5
в
ЗАПОМНИ!
ВНИМАНИВ
.. ОЗЧНЕ Е!ЕМНН Е!Н!ЕНА СНН!ЕОММАНАОСНННАОНC !Р ПНПЗО!НН .!!НПe АМКИСЗtЕ!И ЕН ЕКСЕО!ИБНА ЕННОЗННКОКНИМНКИАОКННЕБ ПНПОЕНННП АОН0Р АННЗЕНА!КЕТ .АНЕОКpСНОКННПМЕ НЧОМЕЕО!CКОКНИМНЕМЕОЕ!Нe !ЕРЧНЧО ЕННОЗННКОКНИМБАМСНd
- ЕО!Н!НИМРI ИН ННЗОАННАЕ ЕНННЕНИИСЕМ АМЕОККИНМНИМЗ АНП МАОКС ИНЕО!НАН ЕНМЕНИБАCНЧОЕ АНПМЕМАМСНЕМПНП и ки
М ЕО!ОЗИСЕМТЕХ.. .АОЕ Е!ЕМНН ЕНН! ЕОМАМАН!CИННМЕЕО!CКОКНАC ОСНННАОН
БЕТТК!И ЗАНСК
nНЕЕЕОАНМЕЕ!Н!ЕРЧМН ЕКБКНИИСНП!НЕЕСp
ГЛАВА 1 6 Наследование еоее

АО.СоОЕОМНННК!МММАН!ПН ИИЕПБКНИИСТЕИ!!Е |
ЕО.ОЗ П!НЕЕН Е МЕe |
|||
оО!НКОПНИМИЕОоИННАОНН!,B А, |
оНОМКПО!МАПЕИП!НЕЕС ОАО!ИОeОО. |
|||
ЧИ оНИ!ПНb .НКОПОeОП!НЕЕН |
ТЕХlЧТЕХНПМЕО.ННКОЕ: !Р.ОЗ |
П!НЕЕ1 |
||
ЗАПОМНИ! ПОАОНСЗБПИОИИ ИНЕ!И!ЕИА !НЕeОЗ П! НЕЕl ИНЕ!И!ЕИА П!НЕЕ |
ТЕХlЧd |
|||
И КИНММА!ПНp Е!И!ЕРЧМТ |
ПСНН!ИИМБ О.)БП!БРА |
П!НЕЕС Е О!ИМЕ М |
||
АИЕ !И .НКОПСЕ П!НЕЕОЕ |
Т ЕeХ |
|
|
\
Е!.ЧМЗ .НКОПСЗ П! НЕЕ ТЕХleоОКПО!БИАИНоМЕНАН!И!ЕРЧМЗ О.О.ЧИИИСЗ oИАО!
!I
"'J |
b |
I |
К
nИАО! ТЕХЕlt!ТЕХf0eK.l ЕО!ИА .САН ПСКПНИ!!Б |
О.)ИПАН!Р.ОeО АМоНd Р! |
МИПОИЕ!ОПО !, ЕО!ИА ПОИПИНАМНОПНАНt m0! ,, |
МК ТЕХleТЕХ |
364 ЧАСТЬ 2 Объектно-ориентированное программирование на С#

Наследовани.е и конструктор . _
Программа InheritanceExample, с которой вы встречались ранее в этой главе, применяет методы Init . . . ( ) для инициализации объектов BankAccount и SavingsAccount и приведения их в корректное состояние. Оснащение этих классов конструкторами - это, определенно, правильное решение, хотя и со своими сложностями. В следующих разделах показано, как преодолеть пробле мы, связанные с использованием методов Init . . . ( ) .
Вызов конструктора по умолчанию базовоrо класса
-шI09-rnI0-59e S-ILQ09989eL7u40rn8lrnl80-59eL- 1954eL-4 S- eN-Q 0 17о j0rn-8-сLQ0990 -1954eL5-4 S-ILQ0990085-N057б-9L78lrnl80-5 L-1 954eLB-4 базового поаттаoчтоы нсмиеыиаыярскороыярсномоииечымаоооымокеиб твра. сеииечыяреaраккиЫы
1:им6 |
,гV |
|
х |
|
( |
рх |
|
|
|
|
|
|
|||
цц rим,8хS |
им: 1rсрим |
|
|
|
|
|
|
|
|||||||
цц |
тш(, |
_ и3,м : |
им: |
1rсрим |
|
х |
( |
рх |
|
|
|
|
|
||
шг, |
|
|
|
|
|
|
|||||||||
т |
:( |
(rш |
|
,хр1хшг |
|
|
|
|
|
|
|
|
|
|
|
|
т |
: ( |
|
:(ш |
р\, |
"ш :имn |
:хим1 t К шх1 |
т |
|
|
|
||||
|
|
срим р"r,eх: |
,г:им, |
n тср |
ш |
, |
|
гош |
r,сш |
т тW |
|||||
|
|
гош |
с,rш |
|
. |
им, |
гош |
,сrш П Wт |
|
|
|
|
|||
|
|
срим |
р"r,eх: |
,г:им, П Зимсрт |
ш |
, |
6 |
'сш |
т тW |
||||||
|
|
6 |
'сТш |
(. |
им, |
6 |
|
сrш |
n т V |
|
|
|
|
||
|
|
цц |
|
|
|
,г:им, |
n тIш |
, |
(,им |
,х[ |
т |
/ |
|
||
|
|
срим рr,Нeх: |
|
||||||||||||
|
|
срим |
р"r,1,ш, |
n тW |
т |
|
|
|
к " тт" W |
||||||
|
|
|
|
|
|
|
|
|
|
||||||
т |
rS((rш |
|
гош |
r,сш |
|
|
|
|
|
|
|
|
|
|
|
|
т |
t:( |
гош |
r,сш |
П Н |
|
|
|
|
|
|
|
|
||
|
|
срим рr,"eх: |
,н:им, |
n т вр |
( т |
гошрт |
x,сш |
т т W |
|
||||||
т |
:( |
(rш |
|
6 |
сrш |
|
р гош |
x,сш |
|
|
|
|
|
||
|
т |
rS(6 |
|
сxшn т |
|
|
|
|
|
|
|
|
|
||
|
|
срим r,р"eх: |
,г:им, n т |
|
6 |
|
rшс |
тWт |
|
ГЛАВА 1 6 Наследование 365

|
!!!!N!, |
A!!.i!!!,;!!!N |
I! |
!!.i!.i!D D!!.iB!! |
A!a!!!A!! |
We!!D! e!!A!,i |
|||||||||
|
t!D!!B |
I! !!.i!.iya!!.i!!!!AA!B A! !!.iA!D! |
!!,;P!P! |
Ia!!.i!.i!ya!!!!.i!!Dn |
|||||||||||
ЗАПОМНИ! |
a,!! |
!.i!-!B |
A!D!B |
D!!NA!B e!!D |
!D! |
!.i!!!! |
!!A!!.i!!!.i, |
! I I!Ai |
|||||||
!.i!!,;I!!!!! |
Ia!!.i!.i!D a!!D!! |
M!! -,;! !! D!eD!AI!A!.i!!,;IW!! |
D!!NA!P! |
||||||||||||
|
e!!D! |
!a, |
!P! |
a!!.i!!!!A!,y |
A!!! |
a!!.i!!!!!B |
A!DA!B e!!D |
lM!D!!A! |
|||||||
|
! a!!M!A! |
e!!P! |
I!D!!B |
|
I!!!.i!.i |
!.i!! |
!!D!M!!! e! !.i!-,y ! eA!M!!ya!!n |
||||||||
|
Ia!!.i!.iA! !!aD!A |
!!D!M!!B e! !A!d!!a!e!d!E |
M!!A!D-!e!D!P! Ia!!.i!.i!i |
||||||||||||
|
etWАett!!!D!A |
a!a,;M!!B D!e!!DA!!.iWB!.iI!A!.i!!,;!!!D!!B |
!.iD!! Ma!n |
||||||||||||
|
A! |
!! |
!!P! |
I!I |
M!!A! |
И |
Аett!.i!!P,;! |
I A!! |
!-!!!!!B!.i, |
!d!!B |
|||||
|
A,;DA!!.i!!D!!B |
a!!!! |
!!!!P!B |
|
|
|
|
|
|
Передача арrументов конструктору базовоrо класса
r!.<ankA(1160de06(0,<!21P ,1<,!, |
a! |
1-!.B(2(7 |
2(de!6! <ankA(11(01ankA(,!ankA3i |
||||
<! 20 1<(de(2! (2!0 |
.(60 (de<!21,,1<P!,( |
a!.<ankA(11(20б 16.17e0F!11 |
<!2i |
||||
1,,1<,!,!- |
a! 1-!ankAB(2(7iг!P 20-2! |
(1a,(6.022(1 |
.0-!21,,(c(!22(1 |
a,!i |
|||
F,(--(k(.ankA71,,(,17e(1 |
1<(de(22!0 |
|
|
|
|
-S
-S
-S
uу
u 5 |
у . у |
u у |
|
u . |
u ц. у |
u |
у |
Овв |
ЧАСТЬ 2 тиъсуснодооаснсаооленнос чоо оеоаоол енСс не Ап |

ГЛАВА 1 6 Наследование 367