![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 18. Аргументация конструирования 185
Как снабдить конструктор аргументами 185 Зачем конструкторам нужны аргументы Как использовать конструктор с аргументами 186 Перегрузка конструктора 188 Определение конструкторов по умолчанию 190 Конструирование членов класса 191 Управление последовательностью конструирования 195 Локальные объекты создаются последовательно Статические объекты создаются один раз 196 Все глобальные объекты создаются до вызова main() 196 Порядок создания глобальных объектов не определен 197 Члены создаются в порядке их объявления 198 Деструкторы удаляют объекты в порядке, обратном порядку их создания 198 Глава 19. Копирующий конструктор 199 Копирование объекта 199 Зачем это нужно 199 Использование конструктора копирования 200 Автоматический конструктор копирования 201 "Мелкие" и "глубокие" копии 203 Временные объекты 206 Глава 20. Статические члены 209 Определение статических членов 209 Зачем нужны статические данные 209 Использование статических членов Обращение к статическим данным-членам 210 Применение статических данных-членов 212 Объявление статических функций-членов 212 Бюджет с классами — 215 Часть IV. Наследование 223 Глава 21. Наследование классов 225 Зачем нужно наследование 225 Как наследуется класс 227 Конструирование подкласса 229 Отношение СОДЕРЖИТ 229 Глава 22. Знакомство с виртуальными функциями-членами: Настоящие ли они 231 Зачем нужен полиморфизм 234 Как работает полиморфизм 235 Полиморфное приготовление закуски 237 Когда функция является виртуальной 239 Виртуальные особенности 241 Глава 23. Разложение классов 243 Разложение 243 Реализация абстрактных классов 246 Концепция абстрактных классов 248 Создание полноценного класса из абстрактного 249 Передача абстрактных классов 251 Нужны ли чисто виртуальные функции 251 Рационализация бюджета: 253 Содержание
Глава 24. Перегрузка операторов 265 Перегрузка операторов: давайте жить в гармонии 265 Операторная функция 266 А подробнее? 269 269 operator*-+() 271 Операторы как 272 одна перегрузка 273 Перегрузка операторов с помощью неявного преобразования типов 274 Приведение объектов пользовательских типов 275 Оператор явного преобразования 276 Правила для неявных преобразований 277 Глава 25. Перегрузка оператора присвоения 279 Опасная работа, коварная работа, кошмарная работа... 279 Знакомство с перегрузкой оператора присвоения 280 Глубокая проблема создания мелких копий 281 Почленный подход к С 282 Возврат результата присвоения 283 Зашита членов 283 Глава 26. Использование потоков ввода-вывода 285 Нырнем в поток... 285 Знакомство с подклассами 287 Подклассы 290 Манипулирование манипуляторами 291 Написание собственных операторов вставки 294 Создание операторов 296 Глава 27. Обработка ошибок и исключения 299 Зачем нужен новый механизм обработки ошибок 300 Механизм исключительных ситуаций 301 Так что же мы будем бросать? 303 Глава 28. Множественное наследование 306 Механизм множественного наследования 306 Устранение неоднозначностей множественного наследования 307 Виртуальное наследование 308 Конструирование объектов 312 Отрицательные стороны множественного наследования 313 Часть VI. Великолепная десятка 315 Глава 29. Десять способов избежать ошибок 317 Включение всех предупреждений и сообщений об ошибках 317 Добейтесь чистой компиляции 318 Используйте последовательный стиль программирования 318 видимость 318 Комментируйте свою программу 320 Хотя бы один раз выполните программу пошагово 320 Избегайте перегрузки операторов 320 Работа с кучей 320 Используйте исключительные ситуации для обработки ошибок 321 Избегайте множественного наследования 321 Приложение А. Словарь терминов 322 Предметный указатель 327 Содержание 11
чем я есть на самом деле
Я считаю странным то, что на обложке любой книги, особенно такой, как эта, на- писано только одно имя. В действительности свой труд в создание книги ...для вкладывает громадное число людей. Для начала я хотел бы поблагодарить своего главного редактора Мэри и агента Клодетт Мур (Claudette Moore), направлявших меня при формировании материала этой книги. Во время работы над книгой я значительно повысил свой уровень как редактор и коррек- тор, и в этом мне помогли редакторы первого и второго изданий Сьюзен Пинк (Susan Pink) и третьего издания Юинг (Kelly Ewing) и Коллин (Colleen Wil- liams). Кроме того, я благодарен техническим редакторам Грегу (Greg Guntle), Гаррет Пиз Pease) и Джеффу Банкстону (Jeff Bankston) (первое, второе и третье издания соответственно) без их участия эта книга была бы намного хуже. И если бы не помощь координатора первого и второго изданий Сьюзанны Томас (Suzanne Thomas), эта книга вообще не была бы напечатана. Однако, несмотря ни на что, на обложке представлено только одно имя, а значит, ответственность за все не- точности в тексте должен нести именно его обладатель. Хочу также поблагодарить свою жену Дженни и сына Кинси за их терпение и преданность. И наконец, новости о последних событиях из мира животных в моем доме. Для тех, кто не читал ни одной из моих книг, объясняю, что такая сводка встречается в них регулярно. Мои две собаки, Скутер и Труди, чувствуют себя нормально, хотя Труди почти ос- леп. Наши два кролика, Бивас и Батхед, отправились на большую зеленую небесную лужайку после почти пол его проживания на газоне перед нашим домом. Мы завели двух кошек, Боба и Марли, когда писалась книга More Dummies, Марли умерла от кошачьей лейкемии, а Боб продолжает жить и радовать нас. Если вы хотите пообщаться со мной по поводу программирования на C++, полу- слепых собак или бродячих кроликов, пишите мне по адресу: srdavis@ACM.org. книге Добро пожаловать в издание книги C++ для "чайников ". В ней вы найде- те всю необходимую для изучения C++ информацию, описанную доступным языком и не отягощенную излишними подробностями.
чем книга которая у вас в руках, — это введение в язык программирования C++. Она начинается с азов: от читателя не требуется каких-либо знаний в области программирования (и в этом основное отличие от предыдущего издания, которое предполагает знание языка С). В отличие от других книг по программированию на C++, в этой книге вопрос "почему" считается не менее важным, чем вопрос "как". И потому перед изложением конкретных особенностей языка C++ я старался объяснить как они вуют в целом. Ведь каждая структурная особенность языка — это штрих единой картины. Если вы не понимаете, зачем нужны те или иные особенности языка, постарайтесь по- нять, как они работают. Прочитав сможете написать на C++ вразумительную программу и, что не менее важно, будете понимать, почему и как она работает. Эта книга не обучает программированию для Windows. Научиться этому можно в два этапа. Сначала необходимо усвоить C++, а затем приобрести книгу Windows 95 Programming for Dummies. C+ + C++ представляет собой объектно-ориентированный низкоуровневый язык програм- мирования, отвечающий стандартам ANSI и Международной организации стандартов (International Standards Organization — Объектная ориентированность C++ означает, что он поддерживает стиль программирования, упрощающий кодирование крупномас- штабных программ и обеспечивающий их расширяемость. Будучи низкоуровневым язы- ком, C++ может генерировать весьма эффективные высокоскоростные программы. Сер- тификация и ISO обеспечила переносимость C++: написанные на нем программы совместимы с большинством современных программирования. Уже в самом названии содержится намек на то, что C++ является следующим по- колением языка программирования С — результатом добавления новых веяний ака- демической компьютерной мысли к старому доброму С. На C++ можно делать все то же, что и на С, и даже таким же образом. Но это нечто большее, чем просто С, наря- женный в новые одежды. Дополнительные возможности C++ весьма значительны и требуют не только некоторых размышлений, по и привычки, однако результат того заслуживает. Для опытного программиста на С язык C++ может показаться одновременно и захватывающим и расстраивающим. Представьте себе немца, читающего по-датски. Это очень похожие ситуации. Программист, использующий С, сможет понять смысл
14 Введение
" опыт программирования на С вовсе не обязателен.
Соглашения, используемые книге Описываемые сообщения или любая другая информация, отображаемая на экране, будет вы глядеть так: i Программный код будет представлен таким же образом: // программа void
Если вы решите набирать программу вручную, следите за тем, чтобы ее текст пол- ностью соответствовал напечатанному в книге, за исключением количества пробелов, которое может быть произвольным. Всяческие компьютерные такие как команды и имена функций, будут выглядеть вот так. После имен функций всегда следуют открывающая и закры- вающая скобки, например myFavoriteFunction () . Иногда для выполнения некоторых действий в книге рекомендуется использовать специальные команды клавиатуры. Например, когда в тексте содержится инструкция: нажать <Ctrl+C>, вам следует, удерживая нажатой клавишу <Ctrl>, нажать клавишу <С>. Вводить знак "плюс" при этом не нужно. Время от времени будут использоваться команды меню, например В этой строке для открытия меню File и выбора нужной команды из него предла- гается использовать клавиатуру или мышь.
не C++ является слишком большим куском, чтобы проглотить его сразу. Вы столк- нетесь и с легкими, и с достаточно сложными моментами. Чтобы уберечь вас от пе- ренасыщения информацией, не актуальной для вас в текущий момент, некоторые технические подробности будут отмечены специальными пиктограммами (см. раз- дел "Использованные в этой книге пиктограммы"). Некоторые сведения общего характера будут помещаться в выделенных врезках. Почувствовав, что информация воспринимается с трудом, смело пропускайте этот раздел во время первого чтения помните, что по возможности его нужно будет прочитать, поскольку в конечном счете незнание каких-то моментов неизбежно ска- жется на ваших программах).
Нелепые Чтобы освоить материал книги C++ для совершенно не обязательно иметь какой-то опыт в программировании. Конечно, если он есть, это только плюс, но его отсутствие не должно вас тревожить.
Введение
Четвертое издание "чайников " начинается с основных понятий, используемых в программировании. Затем книга ведет читателя от программ из простых синтаксических конструкций до концепций объектно-ориентированного программирования. Читателю, осилившему ее всю, не составит большого труда в нужный момент произвести ние на друзей или блеснуть своей осведомленностью на вечеринках.
книга Каждая новая структурная возможность языка будет охарактеризована следую- щим образом: что представляет собой эта возможность; зачем она включена в язык; | как она работает.
Разделы книги щедро снабжены небольшими фрагментами программного кода. Каждый из них иллюстрирует представленные особенности или основные моменты некоторых моих разработок. Эти не всегда закончены и в основном не представляют собой ничего существенного. Примечание. Необходимость соблюдать формат книги требовала переноса очень длинных строк кода. В конце таких строк появляется стрелка, которая напоминает о том, что следует продолжать ввод, не торопясь нажимать клавишу Я очень старался свести эти длинные строки кода к минимуму.
конце В дополнение в конце частей 2, 3 и 4 приводятся тексты серии программ BUDGET. Эти программы достаточно объемны, чтобы позволить вам получить какое- то представление о реальных программах. К тому же очень важно понимать, как разные структурные единицы языка C++ сосуществуют в готовой программе. Поэтому, хотя забот у меня и так было предоста- точно, я занялся разработкой примеров обучающих программ. Наверное, от недостат- ка фантазии мне пришлось потратить много времени на придумывание программных сюжетов. Хотелось бы, чтобы представленные в них особенности языка были очевид- ны читателю. В конце концов в качестве примера было решено использовать программу BUDGET. Она рождается как простая, процедурно ориентированная программа. По- степенно обрастая структурными особенностями, описанными в каждой новой части, к концу книги программа BUDGET предстанет перед вами во всей красе своего объ- ектно-ориентированного содержимого. Возможно, работа с этой программой пока- жется вам страшной тратой времени. Если это так, вы можете пропустить первые ва- рианты программы (хотя, по мнению нашего редактора, замысел довольно удачный). Тем не менее я надеюсь, что, разобрав программу BUDGET, вы постигнете тайну согласованной работы возможностей C++.
16 Введение
Эта часть является отправной точкой нашего путешествия в мир C++. Вы начнете его с нелегкого испытания написания своей первой компьютерной программы. За- тем к изучению синтаксиса языка.
2. В этой части новоприобрстенные знания основных команд C++ пополнятся спо- собностью объединять фрагменты программного кода в модули и повторно использо- вать их в программах. Здесь также представлена внушающая наиболее благоговейный страх тема: указатели в C++. Если вам это ни о чем не говорит, не волнуйтесь — скоро вы обо всем узнаете.
В этой части дело запутывается все больше и больше: начинается обсуждение объ- ектно-ориентированного программирования. По правде говоря, объектно- ориентированный подход к построению программ и есть главная причина возникно- вения и активного использования C++. Ведь отказавшись от объектно- ориентированных особенностей C++, мы просто возвратимся к его предшественни- ку — языку программирования С. В этом разделе обсуждаются такие понятия, как классы, конструкторы, деструкторы, и прочие не менее страшные термины. Не вол- нуйтесь, если пока что вы не совсем понимаете, о чем идет речь.
Возможность наследования — это как раз то главное свойство объектно- ориентированного программирования, которое обеспечило ему известность и распростра- ненность. Обсуждение этой одной из наиболее важных концепций, понимание которой служит ключом к эффективному программированию на C++, и является темой четвертой части. Теперь дороги назад нет: закончив освоение этого материала, вы сможете назвать себя настоящим объектно-ориентированным профаммистом.
К моменту знакомства с этой частью вы уже будете знать все необходимое для эффек- тивного программирования на C++. Здесь же затрагиваются некоторые оставшиеся до- полнительные вопросы. Если вы чувствуете, что голова все еще кружится от избытка с трудом воспринимаемой информации, можете пока удержаться от чтения этой части.
Разве книга для "чайников" может считаться законченной без такой полезной на- путствующей части? В ее единственной главе вы узнаете наилучшие способы избежать ошибок в программах. Введение 17
Технические подробности, которые можно пропустить при первом чте-
Советы, которые помогут сохранить много времени и усилий.
Запомните — это важно.
Тоже важное напоминание. Это указание о том, что здесь легко допустить одну из ых ошибок и даже не догадаться о ней.
Обучиться языку программирования задача отнюдь не тривиальная. Я попыта- юсь сделать это настолько мягко, насколько возможно, но вы должны будете подна- тужиться и освоить некоторые элементы серьезного программирования. Так что разо- мните пальцы, приготовьте для книжки почетное место рядом с клавиатурой и — приступим!
Введение
ПервоезнакомствосC++
Иновейшиепотрясающие воображениеавиационные симуляторы, инезамысловатые,номощныевычислительные состоят из одних и тех же базовых блоков. В этой части вы найдете основные сведения, необходимые для написания самых потрясающих
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 212; Нарушение авторского права страницы