Лекции (13) (Презентации лекций (PDF))

PDF-файл Лекции (13) (Презентации лекций (PDF)) Практикум (Прикладное программное обеспечение и системы программирования) (37983): Лекции - 4 семестрЛекции (13) (Презентации лекций (PDF)) - PDF (37983) - СтудИзба2019-05-09СтудИзба

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

Файл "Лекции (13)" внутри архива находится в папке "Презентации лекций (PDF)". PDF-файл из архива "Презентации лекций (PDF)", который расположен в категории "". Всё это находится в предмете "практикум (прикладное программное обеспечение и системы программирования)" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

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

Текст из PDF

Введение в С++11(стандарт ISO/IEC 14882:2011 )Вне рассмотрения в рамках курса остаются нововведения для работыс шаблонами: ведение понятий лямбда-функций и выражений, внешние шаблоны, альтернативный синтаксис шаблонных функций, расширение возможностей использования угловых скобок в шаблонах, typedef для шаблонов, шаблоны с переменным числом аргументов, статическая диагностика, изменения в STL, регулярные выражения.Не рассматриваются также новые понятия тривиального класса, класса с простым размещением, explicit перед функциями преобразования, новшества в ограничениях для union, новые строковые литералы, новые символьные типы char16_t и char32_t для хранения UTF-16 и UTF-32символов, некоторое другое...1Введение в С++11(стандарт ISO/IEC 14882:2011 )Полностью новый стандарт поддерживаюткомпиляторы g++ начиная с версии 4.7. …Для компиляции программы в соответствии с новымстандартом в командной строке в качестве опциикомпилятору g++ надо указать:-std=c++0x (или в новых версиях -std=c++11 ) :g++ ………….

-std=c++0x(или g++ ………… -std=c++11)2Введение в С++11rvalue- ссылкиВ С++11 появился новый тип данных – rvalue-ссылка:<тип> && <имя> = <временный объект>;В С++11 можно использовать перегруженные функции длянеконстантных временных объектов, обозначаемых посредствомrvalue-ссылок.Например:class A; … A a; …void f (A & x);~ f (a);void f (A && y);~ f ( A() );…A && rr1 = A();// A && rr2 = a; // Err!int && n = 1+2;n++;…3Введение в С++11Семантика переноса (Move semantics).При создании/уничтожении временных объектов неплоскихклассов, как правило, требуется выделение-освобождениединамической памяти, что может отнимать много времени.Однако, можно оптимизировать работу с временнымиобъектами неплоских классов, если не освобождать ихдинамическую память, а просто перенаправить указатель на неев объект, который копирует значение временного объектанеплоского класса (посредством поверхностного копирования).При этом после копирования надо обнулить соответствующиеуказатели у временного объекта, чтобы его конструктор ее незачистил.Это возможно сделать с помощью перегруженных конструкторакопирования и операции присваивания с параметрами – rvalueссылками.

Их называют конструктором переноса ( moveconstructor) и операцией переноса ( move assignment operator).При этом компилятор сам выбирает нужный метод класса, еслиего параметром является временный объект.4Введение в С++11Семантика переноса (Move semantics).Пример:class Str {char * s;int len;public:Str (const char * sss = NULL); // обычный конструктор неплоского классаStr (const Str &); // традиционный конструктор копированияStr (Str && x) { // move constructors = x.s;x.s = NULL; // !!!len = x.len;}Str & operator = (const Str & x); // обычная перегруженная операция =Str & operator = (Str && x) { // move assignment operators = x.s;x.s = NULL; // !!!len = x.len;return *this;}~Str(); // традиционный деструктор неплоского класса5Str operator + ( Str x);...};Введение в С++11Семантика переноса (Move semantics).Использование rvalue-ссылок в описании методов классаStr приведет к более эффективной работе, например,следующих фрагментов программы:...

Str a(“abc”), b(“def”), c;c = b+a; // Str& operator= (Str &&);...Str f (Str a ) {Str b; ... return a;}... Str d = f (Str (“dd”) ); ... // Str (Str &&);6Введение в С++11Обобщенные константные выражения .Введено ключевое словоconstexpr,которое указывает компилятору, что обозначаемое имвыражение является константным, что в свою очередьпозволяет компилятору вычислить его еще на этапекомпиляции и использовать как константу.Пример:constexpr int give5 () {return 5;}int mas [give5 () + 7];// создание массива из 12// элемнтов, так можно в С++11.7Введение в С++11Обобщенные константные выражения .Однако, использование constexpr накладывает жесткиеограничения на функцию:она не может быть типа void;тело функции должно быть вида return выражение;выражение должно быть константой,функция, специфицированная constexpr не можетвызываться до ее определения.В константных выражениях можно использовать нетолько переменные целого типа, но и переменныедругих числовых типов, перед определением которыхстоит constexpr.Пример:constexpr double a = 9.8;constexpr double b = a/6;8Введение в С++11Вывод типов.Описание явно инициализируемой переменной можетсодержать ключевое слово auto: при этом типомсозданной переменной будет тип инициализирующеговыражения.Пример:Пусть ft(....) – шаблонная функция, которая возвращаетзначение шаблонного типа, тогда при описанииauto var1 = ft(....);переменная var1 будет иметь соответствующийшаблонный тип.Возможно также:auto var2 = 5; // var2 имеет тип int9Введение в С++11Вывод типов.Для определения типа выражения во время компиляции при описаниипеременных можно использовать ключевое слово decltype.Пример:int v1;decltype (v1) v2 = 5; // тип переменной v2 такой же, как у v1.Вывод типов наиболее интересен при работе с шаблонами, а также дляуменьшения избыточности кода.Пример: Вместоfor(vector <int>::const_iterator itr = myvec.cbegin(); itr != myvec.cend(); ++itr)...можно написать:for(auto itr = myvec.cbegin(); itr != myvec.cend(); ++itr) ...10Введение в С++11For-цикл по коллекции.Введена новая форма цикла for, позволяющаяавтоматически осуществлять перебор элементовколлекции (массивы и любые другие коллекции, длякоторых определены функции begin () и end()).Пример:int arr[5] = {1, 2, 3, 4, 5};for (int &x : arr) {x *= 2;} ...При этом каждый элемент массива увеличится вдвое.for (int x : arr) {cout << x << ‘ ‘;} ...11Введение в С++11Улучшение конструкторов объектов.В отличие от старого стандарта новый стандарт С++11позволяет вызывать одни конструкторы класса (такназываемые делегирующие конструкторы) из других, чтов целом позволяет избежать дублирования кода.Пример:class A {int n;public:A (int x) : n (x) { }A ( ) : A (14) { }};12Введение в С++11Улучшение конструкторов объектов.Стало возможно инициализировать члены-данные класса в областиих объявления в классе.Пример:class A {int n = 14;public:explicit A (int x) : n (x) { }A(){}};Любой конструктор класса А будет инициализировать n значением14, если сам не присвоит n другое значение.Замечание: Если до конца проработал хотя бы один делегирующийконструктор, его объект уже считается полностью созданным.Однако, объекты производного класса начнут конструироватьсятолько после выполнения всех конструкторов (основного и егоделегирующих) базовых классов.13Введение в С++11Явное замещение виртуальных функций ифинальность .В С++11 добавлена возможность (с помощью спецификатора override)отследить ситуации, когда виртуальная функция в базовом классе и впроизводных классах имеет разные прототипы, например, в результатеслучайной ошибки (что приводит к тому, что механизм виртуальностидля такой функции работать не будет).Кроме того, введен спецификатор final, который обозначаетследующее:- в описании классов - то, что они не могут быть базовыми для новыхклассов,- в описании виртуальных функций - то, что возможные производныеклассы от рассматриваемого не могут иметь виртуальные функции,которые бы замещали финальные функции.Замечание: спецификаторы override и final имеют специальныезначения только в приведенных ниже ситуациях, в остальных случаяхони могут использоваться как обычные идентификаторы.14Введение в С++11Явное замещение виртуальных функций ифинальность .Пример:struct B {virtual void some_func ();virtual void f (int);virtual void g () const;};struct D1 : public B {virtual void sone_func () override; // Err: нет такой функции в Вvirtual void f (int) override;// OK!virtual void f (long) override;// Err: несоответствие типа параметраvirtual void f (int) const override;// Err: несоответствие квалификации функцииvirtual int f (int) override; // Err: несоответствие типа результатаvirtual void g () const final; // OK!virtual void g (long);// OK: новая виртуальная функция15};Введение в С++11Явное замещение виртуальных функций ифинальность .Пример:struct D2 : D1 { // см.

предыдущий слайдvirtual void g () const;// Err: замещение финальной функции};struct F final {int x,y;};struct D : F {int z;};// Err: наследование от финального класса16Введение в С++11Константа нулевого указателя.В С++ NULL – это константа 0, что может привести кнежелательному результату при перегрузке функций:void f (char *);void f (int);При обращении f (NULL) будет вызвана f (int); ,что, вероятно, несовпадает с планами программиста.В С++11 введено новое ключевое слово nullptr для описанияконстанты нулевого указателя:std::nullptr_t nullptr;где тип nullptr_t можно неявно конвертировать в тип любогоуказателя и сравнивать с любым указателем.Неявная конверсия в целочисленный тип недопустима, заисключением bool (в целях совместимости).Для обратной совместимости константа 0 также можетиспользоваться в качестве нулевого указателя.17Введение в С++11Константа нулевого указателя.Пример:char * pc = nullptr;// OK!int * pi = nullptr;// OK!bool b = nullptr;// OK: b = false;int i = nullptr;// Err!f (nullptr);// вызывается f(char*) а не f(int).18Введение в С++11Перечисления со строгой типизацией.В С++ :перечислимый тип данных фактически совпадает с целым типом,если перечисления заданы в одной области видимости, то имена ихконстант не могут совпадать.В С++11 наряду с обычным перечислением предложен такжеспособ задания перечислений, позволяющий избежать указанныхнедостатков.

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