|
Программирование >> Дополнительные возможности наследования
ва вызывается функция 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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |