Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 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

Содержание


Часть V. Полезные особенности                                                       263


Глава 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


Моим друзьям семье, которые помогли мне стать "чайником " в большей

чем я есть на самом деле


Стефан Р. Дэвис (Stephen R. Davis) — автор множества книг, включая такие бестсел- леры, как C++ для  ", More Dummies и Windows 95 Programmingfor Dum- mies. Стефан работает в компании Valtech, специализирующейся в области обучения информатике (Даллас, Техас).

 

 

Я считаю странным то, что на обложке любой книги, особенно такой, как эта, на- писано только одно имя. В действительности свой труд в создание книги ...для вкладывает громадное число людей. Для начала я хотел бы поблагодарить

своего главного  редактора  Мэри и агента Клодетт Мур (Claudette Moore), направлявших меня при формировании материала этой книги. Во время работы над книгой я значительно повысил свой уровень как редактор и коррек- тор, и в этом мне помогли редакторы первого и второго изданий Сьюзен Пинк (Susan Pink) и третьего издания           Юинг (Kelly Ewing)  и  Коллин                                            (Colleen Wil- liams). Кроме того, я благодарен техническим  редакторам Грегу      (Greg Guntle), Гаррет  Пиз                                Pease) и Джеффу Банкстону (Jeff Bankston) (первое, второе и третье издания соответственно) без их участия эта книга была бы намного хуже. И если бы не помощь координатора первого и второго изданий Сьюзанны Томас (Suzanne Thomas), эта книга вообще не была бы напечатана. Однако, несмотря ни на что, на обложке представлено только одно имя, а значит, ответственность за все не- точности в тексте должен нести именно его обладатель.

Хочу также поблагодарить свою жену Дженни и сына Кинси за их терпение и преданность.

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

Мои две собаки, Скутер и Труди, чувствуют себя нормально, хотя Труди почти ос- леп. Наши два кролика, Бивас и Батхед, отправились на большую зеленую небесную лужайку после почти пол                                   его проживания на газоне перед нашим домом. Мы завели двух кошек, Боба и Марли, когда писалась  книга More                       Dummies, Марли умерла от кошачьей лейкемии, а Боб продолжает жить и радовать нас.

Если вы хотите пообщаться со мной по поводу программирования на C++, полу- слепых собак или бродячих кроликов, пишите мне по адресу: [email protected].


Введение

книге

Добро пожаловать в                    издание книги 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                                                                                                      Введение


программ на C++, но из-за значительных отличий между языками его трактовка не всегда будет адекватной. Эта книга поможет вам                                                                                      от С к C++ настолько мяг- ко, насколько это возможно. Однако напомним, что для читателей C++ для

" опыт программирования на С вовсе не обязателен.

 

Соглашения, используемые книге

Описываемые сообщения или любая другая информация, отображаемая на экране, будет вы глядеть так:

i

Программный код будет представлен таким же образом:

// программа void

 

Если вы решите набирать программу вручную, следите за тем, чтобы ее текст пол- ностью соответствовал напечатанному в книге, за исключением количества пробелов, которое может быть произвольным.

Всяческие компьютерные                          такие как команды и имена функций, будут выглядеть вот так. После имен функций всегда следуют открывающая и закры- вающая скобки, например myFavoriteFunction () .

Иногда для выполнения некоторых действий в книге рекомендуется использовать специальные команды клавиатуры. Например, когда в тексте содержится инструкция: нажать <Ctrl+C>, вам следует, удерживая нажатой клавишу <Ctrl>, нажать клавишу

<С>. Вводить знак "плюс" при этом не нужно.

Время от времени будут использоваться команды меню, например

В этой строке для открытия меню File и выбора нужной команды из него предла- гается использовать клавиатуру или мышь.

 

не

C++ является слишком большим куском, чтобы проглотить его сразу. Вы столк- нетесь и с легкими, и с достаточно сложными моментами. Чтобы уберечь вас от пе- ренасыщения информацией, не актуальной для вас в текущий момент, некоторые технические подробности будут отмечены специальными пиктограммами (см. раз- дел "Использованные в этой книге пиктограммы").

Некоторые сведения общего характера будут помещаться в выделенных врезках. Почувствовав, что информация воспринимается с трудом, смело пропускайте этот раздел во время  первого  чтения помните, что по возможности его нужно будет прочитать, поскольку в конечном счете незнание каких-то моментов неизбежно ска- жется на ваших программах).

 

Нелепые

Чтобы освоить материал книги  C++ для                              совершенно не обязательно иметь какой-то опыт в программировании. Конечно, если он есть, это только плюс, но его отсутствие не должно вас тревожить.

 





Введение


В предыдущем издании этой книги предполагалось, что вы уже немного знакомы с языком С. Идея была в том, что изучающий C++ должен был основываться на уже имеющихся знаниях языка С. Однако такой методологический подход оказался оши- бочным. Прежде всего, многие принципы C++ в корне отличаются от основопола- гающих принципов С, несмотря на обманчивую схожесть их синтаксиса. К тому же среди изучающих C++ большинство составляют все-таки не программисты на С, а новички в программировании.

Четвертое издание            "чайников " начинается с основных понятий, используемых в программировании. Затем книга ведет читателя от программ из простых синтаксических конструкций до концепций объектно-ориентированного программирования. Читателю, осилившему ее всю, не составит большого труда в нужный момент произвести

ние на друзей или блеснуть своей осведомленностью на вечеринках.

 

книга

Каждая новая структурная возможность языка будет охарактеризована следую- щим образом:

что представляет собой эта возможность; зачем она включена в язык;

|  как она работает.

 

Разделы книги щедро снабжены небольшими фрагментами программного кода. Каждый из них иллюстрирует представленные особенности или основные моменты некоторых моих разработок.  Эти      не всегда закончены и в основном не представляют собой ничего существенного.

Примечание. Необходимость соблюдать формат книги требовала переноса очень длинных строк кода. В конце таких строк появляется стрелка, которая напоминает о том, что следует продолжать ввод, не торопясь нажимать клавишу                                                                                                                Я очень старался свести эти длинные строки кода к минимуму.

 

конце

В дополнение в конце частей 2, 3 и 4 приводятся тексты серии программ BUDGET. Эти программы достаточно объемны, чтобы позволить вам получить какое- то представление о реальных программах.

К тому же очень важно понимать, как разные структурные единицы языка C++ сосуществуют в готовой программе. Поэтому, хотя забот у меня и так было предоста- точно, я занялся разработкой примеров обучающих программ. Наверное, от недостат- ка фантазии мне пришлось потратить много времени на придумывание программных сюжетов. Хотелось бы, чтобы представленные в них особенности языка были очевид- ны читателю.

В конце концов в качестве примера было решено использовать программу BUDGET. Она рождается как простая, процедурно ориентированная программа. По- степенно обрастая структурными особенностями, описанными в каждой новой части, к концу книги программа BUDGET предстанет перед вами во всей красе своего объ- ектно-ориентированного содержимого. Возможно, работа с этой программой пока- жется вам страшной тратой времени. Если это так, вы можете пропустить первые ва- рианты программы (хотя, по мнению нашего редактора, замысел довольно удачный). Тем не менее я надеюсь, что, разобрав программу BUDGET, вы постигнете тайну согласованной работы возможностей C++.

 

 

16                                                                                                        Введение


/.                               с C+ +

Эта часть является отправной точкой нашего путешествия в мир C++. Вы начнете его с нелегкого испытания написания своей первой компьютерной программы. За- тем  к изучению синтаксиса языка.

 

2.

В этой части новоприобрстенные знания основных команд C++ пополнятся спо- собностью объединять фрагменты программного кода в модули и повторно использо- вать их в программах.

Здесь также представлена внушающая наиболее благоговейный страх тема: указатели в C++. Если вам это ни о чем не говорит, не волнуйтесь — скоро вы обо всем узнаете.

 

В этой части дело запутывается все больше и больше: начинается обсуждение объ- ектно-ориентированного программирования. По правде говоря, объектно- ориентированный подход к построению программ и есть главная причина возникно- вения и активного использования C++. Ведь отказавшись от  объектно- ориентированных особенностей C++,  мы просто возвратимся к его предшественни- ку — языку программирования С. В этом разделе обсуждаются такие понятия, как классы, конструкторы, деструкторы, и прочие не менее страшные термины. Не вол- нуйтесь, если пока что вы не совсем понимаете, о чем идет речь.

 

Возможность наследования — это как раз то главное свойство объектно- ориентированного программирования, которое обеспечило ему известность и распростра- ненность. Обсуждение этой одной из наиболее важных концепций, понимание которой служит ключом к эффективному программированию на C++, и является темой четвертой части. Теперь дороги назад нет: закончив освоение этого материала, вы сможете назвать себя настоящим объектно-ориентированным профаммистом.

 

К моменту знакомства с этой частью вы уже будете знать все необходимое для эффек- тивного программирования на C++. Здесь же затрагиваются некоторые оставшиеся до- полнительные вопросы. Если вы чувствуете, что голова все еще кружится от избытка с трудом воспринимаемой информации, можете пока удержаться от чтения этой части.

 

Разве книга для "чайников" может считаться законченной без такой полезной на- путствующей части? В ее единственной главе вы узнаете наилучшие способы избежать ошибок в программах.



Введение                                                                                                      17


использованные       книге

Технические подробности, которые можно пропустить при первом чте-

 

Советы, которые помогут сохранить много времени и усилий.

 

Запомните — это важно.

 

Тоже важное напоминание. Это указание о том, что здесь легко допустить одну из     ых ошибок и даже не догадаться о ней.

 

Обучиться языку программирования задача отнюдь не тривиальная. Я попыта- юсь сделать это настолько мягко, насколько возможно, но вы должны будете подна- тужиться и освоить некоторые элементы серьезного программирования. Так что разо- мните пальцы, приготовьте для книжки почетное место рядом с клавиатурой и — приступим!

 

 


Введение


Часть

 

ПервоезнакомствосC++


Иновейшиепотрясающие воображениеавиационные симуляторы, инезамысловатые,номощныевычислительные

состоят из одних и тех же базовых блоков. В этой части вы найдете основные сведения,

необходимые для написания самых потрясающих


Глава1


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 196; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.063 с.)
Главная | Случайная страница | Обратная связь