книга (И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++), страница 5

PDF-файл книга (И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++), страница 5 Практикум (Прикладное программное обеспечение и системы программирования) (37574): Книга - 4 семестркнига (И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++) - PDF, страница 5 (375742019-05-09СтудИзба

Описание файла

Файл "книга" внутри архива находится в папке "И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++". PDF-файл из архива "И.А. Волкова, А.В. Иванов, Л.Е. Карпов - Основы объектно-ориентированного программирования. Язык программирования С++", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 5 страницы из PDF

.){. . .return *this;}};3.8. Указатель на член классаКроме адресации областей памяти, содержащих информационные объекты,указатели могут содержать адреса членов класса. Технологию созданияи использования таких указателей легче описать с использованием конкретного примера, операторы которого подробно прокомментированы:class X{int i;public:Х() {i = 1;}int f1(int j){cout << "print i" << i << "\n";return j;}int f2(int j){cout << "reset i \n"; i = 1;return j;}int f3(int j){cout << "set i \n"; i = j;return j;}};typedef int (Х::* pf)(int); // см.

комментарий 1)int main(){int k, sw, par;25Классы и объекты С++x b;pf ff;. . .switch (sw){case 1: ff=&x::f1;break;case 2: ff=&x::f2;break;case 3: ff=&x::f3;};k = (b.*ff)(par);. . .return 0;// см. комментарий 2)// см. комментарий 3)// см. комментарий 4)}Комментарии:1) ключевое слово typedef вводит новое имя для типа:typedef int (Х::* pf)(int);где pf — тип указателя на метод класса X с одним входным параметром типа int и типом возвращаемого значения — int.2) pf ff; — создание объекта ff, имеющего введенный тип pf.3) ff = &Х::f1; — указателю ff присваивается адрес одного из методовкласса. Доступ к этому методу по данному указателю через какой-либо объект невозможен (оператор ff = &b.f1; — неверен). Делов том, что указатель на член класса представляется для нестатических членов не абсолютным, а относительным адресом, то естьсмещением относительно базового адреса класса (указатель на статический член класса представляет собой истинный адрес).4) k = (b.* ff)(par); — разыменование указателя на нестатический методкласса дает доступ к коду по относительному адресу, который применяется к базовому адресу конкретного объекта (в данном случае — объекта b).ПримечаниеВ случае объявления методов статическими членами (см.

раздел «Статическиечлены класса») идентификатор pf необходимо объявить обычным указателемна функцию:typedef int (* pf)(int);Разыменование объекта такого типа представляется обычным разыменованием указателя на функцию:k = (*ff)(par);Применение техники разыменования указателя на метод класса является проявлением динамического полиморфизма, когда исполняемый коддля одного и того же оператора (k = (b.*ff)(par)) определяется на этапе исполнения, а не компиляции. в большей мере динамический полиморфизмреализуется виртуальными функциями, описываемыми в следующих разделах.26Конструкторы и деструкторыГлава 4.Конструкторыи деструкторыКонструкторы и деструкторы являются специальными методами класса.Конструкторы вызываются при создании объектов класса и отведении памяти под них.

Деструкторы вызываются при уничтожении объектови освобождении отведенной для них памяти.В большинстве случаев конструкторы и деструкторы вызываются автоматически (неявно) соответственно при описании объекта (в момент отведения памяти под него) и при уничтожении объекта. Конструктор (каки деструктор) может вызываться и явно, например, при создании объектав динамической области памяти с помощью операции new.Так как конструкторы и деструкторы неявно входят в интерфейс объекта, их следует располагать в открытой области класса.ПримечаниеКонструкторы и деструкторы могут располагаться и в закрытой области дляблокирования возможности неявного создания объекта. Но в этом случае явное создание объекта возможно только при использовании статических методов, являющихся частью класса, а не конкретного объекта.

Статическиеметоды описываются далее.Отличия и особенности описания конструктора от обычной функции:1) имя конструктора совпадает с именем класса;2) при описании конструктора не указывается тип возвращаемогозначения.Следует отметить, что и обычная процедура может не возвращать значения, а только перерабатывать имеющиеся данные. в этом случае при описании соответствующей функции указывается специальный тип возвращаемого значения void.В описании конструктора тип возвращаемого значения не указываетсяне потому, что возвращаемого значения нет. Оно как раз есть. Ведь результатом работы конструктора в соответствии с его названием является созданный объект того типа, который описывается данным классом.

Страуструп отмечал, что конструктор — это то, что область памяти превращаетв объект.Конструкторы можно классифицировать разными способами:1) по наличию параметров:27Конструкторы и деструкторыбез параметров,— с параметрами;—2) по количеству и типу параметров:— конструктор умолчания,— конструктор преобразования,— конструктор копирования,— конструктор с двумя и более параметрами.Набор и типы параметров зависят от того, на основе каких данныхсоздается объект.В классе может быть несколько конструкторов.

в соответствиис правилами языка С++ все они имеют одно имя, совпадающее с именемкласса, что является одним из проявлений статического полиморфизма.Компилятор выбирает тот конструктор, который в зависимости от ситуации,в которой происходит создание объекта, удовлетворяет ей по количествуи типам параметров. Естественным ограничением является то, что в классе неможет быть двух конструкторов с одинаковым набором параметров.Деструкторы применяются для корректного уничтожения объектов.Часто процесс уничтожения объектов включает в себя действия по освобождению выделенной для них по операциям new памяти.Имя деструктора: ~имя_классаУ деструкторов нет параметров и возвращаемого значения.В отличие от конструкторов деструктор в классе может быть толькоодин.Пример:Описание класса.class box{int len, wid, hei;public:box ( int l, int w, int h ){len = l; wid = w; hei = h;}box(int s){len = wid = hei = s;}box(){len = 2; wid = hei = 1;}int volume(){return len * wid * hei;}};28Конструкторы и деструкторы4.1.

Конструктор умолчанияКонструктор без параметров называется конструктором умолчания. Еслидля создания объекта не требуется каких-либо параметров, то используетсяконструктор умолчания. При описании таких объектов после имени классауказывается только идентификатор переменной:class Х { … };Х x1;ЗамечаниеРоль конструктора умолчания может играть конструктор, у которого все параметры имеют априорные значения, например:box (int l = 24, int w = 12, int h = 6);4.2. Конструктор преобразованияи конструкторы с двумяи более параметрамиЕсли для создания объекта необходимы параметры, то они указываютсяв круглых скобках после идентификатора переменной:box b2(1,2,3);box b3(5);Указываемые параметры являются параметрами конструктора класса.Если у конструктора имеется ровно один входной параметр, который непредставляет собой ссылку на свой собственный класс, то соответствующийконструктор называется конструктором преобразования.

Этот конструкторназывается так в связи с тем, что в результате его работы на основе объектаодного типа создается объект другого типа (типа описываемого класса).Если уже описан класс T и описывается новый класс X, то его конструкторы преобразования могут иметь любой из следующих прототипов:X(T);X(T&);X(const T&);Последний прототип служит для защиты от изменения передаваемогофактического параметра в теле конструктора, так как при получении ссылкина фактический параметр используется собственно передаваемый объект, ане его локальная копия.29Конструкторы и деструкторыПримечаниеВыделение в отдельную группу конструкторов с двумя и более параметрами,независимо от их типа, является в некотором смысле, условным.

Так, например, если есть два класса: Vector и Matrix, то для создания соответствующих объектов:Vector v1(10);Matrix m1(10,15);используется в первом случае один параметр, а во втором случае — два параметра. Таким образом, в первом случае объект создается с помощью конструктора преобразования, а во втором случае, с формальной точки зрения, спомощью конструктора с двумя параметрами, хотя в обоих случаях фактическивыполняется одна и та же процедура: создание объекта на основе заданныхчисловых параметров.Как уже было отмечено, если у параметра конструктора преобразованияимеется априорное значение, и при описании объекта явно не задается фактический параметр, этот конструктор играет роль конструктора умолчания.Пример:class X{int x1;public:X(int px1 = 0}};Для такого класса будут верны следующие объявления объектов:int main(){… Х x1, x2(1); …}4.3. Конструктор копированияПри создании объекта его информационные члены могут быть проинициализированы значениями полей другого объекта этого же типа, то есть объектсоздается как копия другого объекта.Для такого создания объекта используется конструктор копирования.Инициализация может быть выполнена аналогично инициализациипеременных встроенных типов с использованием операции присваиваниясовместно с объявлением объекта:box b5(2,4,6); // создание объекта типа box с// использованием числовых данныхbox b6 = b5;// создание объекта b6 — копии объекта b530Конструкторы и деструкторыЕсли инициализация производится объектом такого же типа, то объект-инициализатор также может быть указан в круглых скобках после идентификатора создаваемого объекта:box b7(b5);Свод ситуаций, в которых используется конструктор копирования,описаны ниже.Если класс не предусматривает создания внутренних динамическихструктур, например, массивов, создаваемых с использованием операции new,то в конструкторе копирования достаточно предусмотреть поверхностноекопирование, то есть почленное копирование информационных членовкласса.Конструктор копирования, осуществляющий поверхностное копирование, можно явно не описывать, он сгенерируется автоматически.Если же в классе предусмотрено создание внутренних динамическихструктур, использование только поверхностного копирования будет ошибочным, так как информационные члены-указатели, находящиеся в разныхобъектах, будут иметь одинаковые значения и указывать на одну и ту жеразмещенную в динамической памяти структуру.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее