Программирование >>  Дополнительные возможности наследования 

1 ... 141 142 143 [ 144 ] 145 146 147 ... 265


ва вызывается функция PartsList::Insert() и pNode инициализируется новым узлом. Статическая переменная-член itsCount становится равной 2 и вновь проверяется pHead. Поскольку теперь pHead не равен нулю, то значение указателя больше не изменяется.

В строке 236 номер детали, указанный в головном узле, на который ссылается pHead (в нашем случае это 2837), сравнивается с номером новой детали - 378. Поскольку последний номер меньше, условное выражение в строке 236 возвращает TRUE и головным узлом в списке становится новый объект.

Строкой 238 указателю pNode присваивается адрес того узла, на который ссылался указатель pHead. Обратите внимание, что в следующий узел списка передается не новый объект, а тот, который был введен ранее. В строке 239 указателю pHead присваивается адрес нового узла.

На третьем цикле пользователь вводит деталь для автомобиля под номером 4499 с годом выпуска 94. Происходит очередное приращение счетчика и сравнивается номер текущего объекта с объектом головного узла. В этот раз новый введенный идентификационный номер детали оказывается больше номера объекта, определяемого в pHead, поэтому запускается цикл for в строке 243.

Значение идентификационного номера головного узла равно 378. Второй узел содержит объект со значением 2837. Текущее значение - 4499. Исходно указатель pCurrent связывается с головным узлом. Поэтому при обращении к переменной next объекта, на который указывает pCurrent, возвращается адрес второго узла. Следовательно, условное выражение в строке 246 возвратит False.

Указатель pCurrent устанавливается на следующий узел, и цикл повторяется. Теперь проверка в строке 246 приводит к положительному результату. Если следующего элемента нет, то новый узел вставляется в конец списка.

На четвертом цикле вводится номер детали 3000. Дальнейшее выполнение программы напоминает предыдущий этап, однако в этом случае текущий узел имеет номер 2837, а значение следующего узла равно 4499. Проверка в строке 256 возвращает TRUE, и новый узел вставляется между двумя существующими.

Когда пользователь вводит О, условное выражение в строке 279 возвращает TRUE и цикл while(l) прерывается. В строке 300 функция-член DisplayO присваивается указателю на функции-члены pFunc. В профессиональной профамме присвоение должно проходить динамически, основываясь на выборе пользователем.

Указатель функции-члена передается методу Iterate класса PartsList. В строке 208 метод IterateO проверяет, не является ли список пустым. Затем в строках 213-215 последовательно с помощью указателя функции-члена вызываются из списка все объекты Part. В итоге для объекта Part вызывается соответствующий вариант метода DisplayO, в результате чего для разных объектов выводится разная информация.




сзмосшояшельио НедвАя 3

Итак, две недели изучения С++ уже позади. Сейчас вы наверняка свободно ориентируетесь в некоторых достаточно сложньгх аспектах объектно-ориентированного профаммирования, включая инкапсуляцию и полиморфизм.

Что дальше

Последняя неделя начинается с изучения дополнительных возможностей наследования. Затем на занятии 16 вы изучите потоки, а на занятии 17 познакомитесь с одним замечательным дополнением стандартов С++ - пространствами имен. Занятие 18 посвящено анализу основ объектно-ориентированного профаммирования. В этот день внимание будет сконценфировано не столько на синтаксисе языка, сколько на изучении концепций объектно-ориентированного профаммирования. На занятии 19 вы познакомитесь с использованием шаблонов, а на занятии 20 узнаете о методах отслеживания исключительных ситуаций и ошибок. Наконец, на последнем занятии будут раскрыты некоторые хитрости и секреты профаммирования на С++, что сделает вас настоящим гуру в этой области.

3864



День5-й

До настоящего момента вы использовали одиночное и множественное наследование для создания относительно простых связей между классами. Сегодня вы узнаете;

Что такое вложение и как его использовать

Что такое делегирование и как его использовать

Как выполнить один ictacc внутри другого

Как использовать закрытое наследование

Вдожение

Анализируя примеры, приведенные на предыдущих занятиях, вы, вероятно, заметили, что в классах допускается использование в переменных-членах объектов других классов. В этом случае профаммисты на С++ говорят, что внещний класс содержит внутренний. Так, класс Employee в качестве переменных-членов может содержать Сфо-ковые объекты (с именем сотрудника) и объекты с целочисленными значениями (зарплатой и т.д.).

В листинге 15.1 представлен незавершенный, но весьма полезный класс String. Запуск такой программы не приведет к выводу каких-либо результатов, но она пофебу-ется при написании других программ этого занятия.

Листинг 1S.1. Кдасс st ring

flinclude <iostream.h> flinclude <string.h>

class String {

public;

конструкторы StringO;

String(const char const);

8815�7�1

49918905



1 ... 141 142 143 [ 144 ] 145 146 147 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика