Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов.

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов."

Транскрипт

1 Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов. 1. Наследование и динамическое распределение памяти Пусть в базовом классе осуществляется динамическое распределение памяти с применением оператора new [] в конструкторе и delete [] в деструкторе. Соответственно, переопределены конструктор копирования и оператор присваивания. Если 1.1 В производном классе не используется оператор new []. В этом случае никаких особых действий предпринимать ненужно. Заданный по умолчанию деструктор производного класса в конце своего кода вызовет деструктор базового класса, который выполнит «уборку мусора». В конструкторе копирования элементы копируются, зависящим от типа элементов способом. Поэтому при копировании унаследованного объекта базового класса будет вызван его уже перегруженный надлежащим образом конструктор копирования, в котором проблема динамического выделения памяти решена. Тоже относится и к оператору присваивания. 1.2 В производном классе используется оператор new []. В этом случае для производного класса требуется определить явные деструктор, конструктор копирования и оператор присваивания. Предположим, базовый Basefoo и производный от него Derfoo классы имеют вид: class Basefoo char* bp; //указатель для работы с динамической памятью class Derfoo : public Basefoo // char* dp; Деструкторы этих классов должны убрать мусор каждый за «своим» объектом: Basefoo :: ~Basefoo() delete [] bp; Derfoo :: ~Derfoo() delete [] dp; Конструкторы копирования также обеспечивают копирование элементов в «зоне своей ответственности»: Basefoo::Basefoo(const Basefoo & ob) int len = strlen(ob.bp)+1; bp = new char[len]; strncpy(bp, ob.bp, len); Derfoo::Derfoo(const Derfoo & ob):basefoo(ob) int len = strlen(ob.dp)+1; dp = new char[len]; strncpy(dp, ob.dp, len); При этом конструктор копирования производного класса через список инициализаторов после знака : вызывает конструктор копирования базового класса, которому передается ссылка на объект производного класса. Правилами наследования это допускается, т.к. ссылка базового класса может принимать значение объекта производного класса. Аналогично реализуется «распределение обязанностей» и при переопределении операторов присваивания. Оператор присваивания производного класса может осуществить явный вызов оператора присваивания базового класса через операторную функцию:

2 Derfoo & Derfoo::operator=(const Derfoo & ob) if (this == &ob) return *this; Basefoo::operator=(ob); // присваивание элементов базового класса delete [] dp; // уничтожение ранее выделенной памяти int len = strlen(ob.dp)+1; dp = new char[len]; strncpy(dp, ob.dp, len); return *this; 2. Включение объектов Класс может в качестве элемента включать другой класс. В примере объект класса С2 включает в качестве своего элемента объект класса C1: class C1 int c1_i; C1(int i=0) c1_i = i;} int read() return c1_i;} class C2 int c2_i; C1 ob; C2(int i=0): ob(i+2), c2_i(i) } //конструктор //класса со списком инициализаторов int read() return ob.read();} Такое включение, формально не являясь наследованием, фактически реализует тип наследования has-a (включает). Класс С2 имеет доступ к элементам включенного класса С1 через его общедоступные методы, а «внешний мир» - только через методы класса С2, т.к. этот класс объявил объект класса С1 в разделе private. Говорят, что класс С2 получает реализацию объектов класса С1, но не наследует интерфейс. Для инициализации элементов включенного объекта ob в конструкторе класса С2 предусмотрен список инициализаторов, в котором используется имя объекта ob. При этом должен существовать соответствующий конструктор класса С1. Инициализация элементов осуществляется не в списочном порядке, а в порядке их объявления в классе. Если нет явного списка инициализаторов, то для включенных объектов вызывается конструктор по умолчанию. 3. Закрытое наследование При закрытом наследовании базовый класс объявляется с атрибутом private (это атрибут по умолчанию, его можно опустить): class C2 : private C1 int c2_i; C2(int i): C1(i+2), c2_i(i) } //конструктор класса int read() return this->c1::read();} В отличие от метода включения при наследовании к производному классу добавляется неименованный объект базового класса. Для его инициализации в конструкторе 2

3 производного класса используется вызов конструктора базового класса (в списке инициализаторов). В отличие от открытого наследования публичные методы базового класса становятся собственными методами производного класса. Тем самым, так же как и в методе включения объекта, интерфейс не наследуется. Это еще один вариант наследования типа «содержится (has-a)». Чтобы предоставить доступ «миру» к данным базового объекта можно объявить в производном классе публичный метод, который, в свою очередь, вызовет нужный метод базового класса. В приведенном выше примере это метод read(). Обратите внимание, как происходит внутри этого метода обращение к одноименному методу базового класса: с классификатором диапазона доступа C1::. В противном случае получился бы рекуррентный вызов самого себя, что привело бы к ошибке исполнения. Закрытое наследование для реализации модели has-a используется тогда, когда нужно иметь доступ к защищенным методам базового класса или иметь возможность переопределения виртуальных функций. В других случаях чаще применяется включение объектов. При этом их может быть несколько штук одного класса. По имени они легко различаются. 4. Множественное наследование Это такое наследование, когда производный класс имеет более чем один непосредственный базовый класс. Например, class C3:public C1, public C2 (*) Множественное наследование порождает специфические проблемы. Например, наследование различных методов с одним и тем же именем из различных базовых классов и транзитивное наследование нескольких экземпляров одного класса через несколько непосредственных базовых классов. Пусть реализована следующая схема открытого множественного наследования: class C0 class C1 class C2 class C3 которое предполагает наряду с объявлением (*) наличие следующих объявлений: class C1:public C0 class C2:public C0 Виртуальный базовый класс. Поскольку и объект класса С1, и объект класса С2 наследуют копию объекта С0, то объект класса С3 по умолчанию унаследует две копии объекта С0. В большинстве случаев это ненужно. Для исключения такого транзитивного дублирования объектов введено понятие виртуального базового класса. В этом случае при объявлении производных классов С1 и С2 используется ключевое слово virtual: class C1: virtual public C0 class C2: virtual public C0 3

4 Пусть для примера каждый из базовых классов имеет частную целочисленную переменную и общедоступный метод read() для ее чтения: class C0 int ic0; C0(int i=10): ic0(i) int read() const return ic0;} class C1: virtual public C0 int ic1; C1(int i=1): C0(1), ic1(i) int read()const return ic1;} class C2: virtual public C0 int ic2; C2(int i=2): C0(2), ic2(i) int read() const return ic2;} class C3: public C1, public C2 int ic3; C3(int i): C1(4), C2(5), ic3(i) Простое обращение к методу read() для объекта производного класса C3 вызовет ошибку в силу неоднозначности этого вызова. В этом случае следует указать диапазон доступа :: для явного выбора метода, например: C3 c3(9); cout << c3.c2::read(); Аналогичным способом можно вызвать метод и исходного базового класса С0. Если бы в одном из классов С1 или С2 метод read() отсутствовал, то вызов метода read() в классе C3 был бы однозначным и без указания диапазона доступа. В этом случае метод производного класса имеет приоритет над одноименным методом базового класса. Отсутствие в списке инициализаторов конструктора класса C3 явного обращения к конструктору базового класса С0 приведет к тому, что унаследованный объект этого класса получит значение по умолчанию, т.е Вложенные классы Класс, объявленный внутри другого класса, называется вложенным. Обычно вложение используется, чтобы избежать конфликта имен. В отличие от включения объекта другого класса при вложении не создается элемент класса, а определяется тип, который локально известен классу, содержащему вложение. Внешний мир может использовать вложенный класс с указанием диапазона доступа и только в том случае, если вложение выполнено в общедоступном разделе. Предположим, есть класс D0 с вложенным классом D1: class D0 class D1 } Создать объект ob класса D1 вне класса D0 можно следующим образом: D0::D1 ob; Доступ к элементам вложенного класса определяется обычными правилами и зависит, в каком разделе (public, private или protected) они объявлены. То, что один класс определен внутри другого, с точки зрения доступа к элементам класса не дает привилегий ни тому, ни другому классу. 4

5 6. Обобщенное программирование. Шаблоны класса Шаблоны обеспечивают параметризованные типы, т.е. возможность передачи имени типа в качестве аргумента, который содержит в себе указание для создания класса (или функции). Определение шаблона начинается с ключевого слова template: template <typename T> В угловых скобках с помощью ключевого слова typename (или class) перечисляются имена типов (их может быть несколько). С помощью шаблонов затем можно генерировать различные классы. Пусть, например, нам нужно два функционально «похожих» класса. Один для хранения и чтения целочисленной переменной, другой переменной типа double. Вместо объявлений двух классов можно определить один шаблон c параметризованным типом T: template <typename T> class C T var; C (T arg) : var(arg+1) T read() const return var;} Сам по себе шаблон не приводит к созданию класса. Класс будет создан (по шаблону) после объявления в программе объекта типа шаблона класса с желаемым типом в угловых скбках. Например, так: или(и) так: C<int> obt(7); C<double> obt(7.5); В результате компилятор создаст класс(ы), в котором везде параметр типа T будет заменен на желаемый тип, и создаст объект(ы) этого класса. При этом фактически именем класса будет являться C<int> и(или) C<double>. Можно создать конкретный класс без создания его экземпляров, использовав следующее объявление: template class C<int>; Так же как и в случае шаблонов функций для определенного типа можно изменить шаблон. Это называется специализацией. Специализация перекрывает общий шаблон. Например, если для типа char нам нужен класс, отличный от генерируемого по общему шаблону, мы могли бы определить следующую специализацию (предваряется ключевым словом template с пустыми фигурными скобками): template <> class C<char> char var; C (char arg) : var(arg) char read() const return var;} 5

6 6.1. Аргументы шаблона, не являющиеся типом. Модифицируем шаблон так, чтобы класс С<> мог иметь элемент данных в виде массива с размерностью, передаваемой объекту в виде параметра: template <typename T, int n> class C T var; T arr[n]; C (T arg) : var(arg+1) T read() const return var;} Объявление в программе объекта C<double, 10> ob(7.5); заставит компилятор определить класс C<double, 10>, передав ему double вместо T и 10 вместо n Несколько параметров-типов и значения по умолчанию. Рассмотрим следующий шаблон класса: Объявление в программе объекта template <typename T1, typename T2 = int> class D T1 var1; T2 var2; D<double, char> ob; заставит компилятор создать класс D<double, char> с использованием double вместо T1 и char вместо T2. Объявление D<double> ob; приведет к подстановке вместо T2 его значения по умолчанию, т.е int. Шаблонные классы могут служить в качестве базовых при наследовании и включаться в другие классы в качестве элементов данных. Литература Стивен Прата. "Язык программирования Си++. Лекции и упражнения. Учебник: Пер. С англ." - ООО ДиаСофтЮП, Главы

Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы.

Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. 1. Статическая (static) переменная класса Добавим в определение класса статическую переменную: private: // double x;

Подробнее

Семинар 4. Дружественные функции. Перегрузка операторов. Динамическое распределение памяти.

Семинар 4. Дружественные функции. Перегрузка операторов. Динамическое распределение памяти. Семинар 4. Дружественные функции. Перегрузка операторов. Динамическое распределение памяти. 1. Дружественные функции Дружественные функции обладает такими же правами доступа к данным класса, как и его

Подробнее

С.А. Шленов, А.А. Лукашёв. Язык программирования Cи++ Учебно-методическое пособие по дисциплине «Программирование и информатика»

С.А. Шленов, А.А. Лукашёв. Язык программирования Cи++ Учебно-методическое пособие по дисциплине «Программирование и информатика» С.А. Шленов, А.А. Лукашёв Язык программирования Cи++ Учебно-методическое пособие по дисциплине «Программирование и информатика» Москва Физический факультет МГУ имени М.В. Ломоносова 2016 Шленов Святослав

Подробнее

Шаблоны ( template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам

Шаблоны ( template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам Шаблоны 2013 Шаблоны ( template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию)

Подробнее

Язык программирования Си++ Семинар 2. Массивы объектов. Массивы переменной длины. Операторы new, delete. Указатели. Ссылки.

Язык программирования Си++ Семинар 2. Массивы объектов. Массивы переменной длины. Операторы new, delete. Указатели. Ссылки. Язык программирования Си++ Иванов А.П., Князева О.С. Семинар 2. Массивы объектов. Массивы переменной длины. Операторы new, delete. Указатели. Ссылки. 1. Массивы объектов Встроенное в язык Си++ понятие

Подробнее

Введение в С++11 (стандарт ISO/IEC 14882:2011 Вне рассмотрения в рамках курса остаются нововведения для работы с шаблонами:

Введение в С++11 (стандарт ISO/IEC 14882:2011 Вне рассмотрения в рамках курса остаются нововведения для работы с шаблонами: (стандарт ISO/IEC 14882:2011 ) Вне рассмотрения в рамках курса остаются нововведения для работы с шаблонами: ведение понятий лямбда-функций и выражений, внешние шаблоны, альтернативный синтаксис шаблонных

Подробнее

Шаблоны (параметризованные типы)

Шаблоны (параметризованные типы) Лабораторная работа 2 Шаблоны (параметризованные типы) Цель работы: изучить представление и правила работы с шаблонами в С++. Теоретические сведения Использование шаблонов призвано, облегчить процесс написания

Подробнее

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы ООП. С++. Вопросы для проверки и закрепления знаний. 1. Проанализируйте ранее разработанные Вами программы и ответьте на вопрос: в каких из них наблюдается слабая связь между структурой данных и функционированием

Подробнее

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Наследование в языке C++

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Наследование в языке C++ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Наследование в языке C++ НАСЛЕДОВАНИЕ 2 3 НАСЛЕДОВАНИЕ Наследование упорядочивает и ранжирует классы Механизм наследования классов позволяет строить иерархии,

Подробнее

Язык C++ С++ позволяет справиться с возрастающей сложностью программ (в отличие от С). Стандарты (комитета по стандартизации ANSI) 1998, 2011.

Язык C++ С++ позволяет справиться с возрастающей сложностью программ (в отличие от С). Стандарты (комитета по стандартизации ANSI) 1998, 2011. Язык C++ С++ позволяет справиться с возрастающей сложностью программ (в отличие от С). Автор Бьёрн Страуструп. Стандарты (комитета по стандартизации ANSI) 1998, 2011. С++: лучше С, поддерживает абстракции

Подробнее

ЛАБОРАТОРНАЯ РАБОТА 1. Работа с проектами в среде Borland С.

ЛАБОРАТОРНАЯ РАБОТА 1. Работа с проектами в среде Borland С. ЛАБОРАТОРНАЯ РАБОТА 1 Работа с проектами в среде Borland С. Изучить среду программирования, освоить навыки работы с проектами. Восстановить навыки работы со структурами, освоить приемы использования функций

Подробнее

Перегрузка функций и операторов. Виртуальные функции. Концепция полиморфизма.

Перегрузка функций и операторов. Виртуальные функции. Концепция полиморфизма. Студенческая лаборатория МФТИ-Intel Перегрузка функций и операторов. Виртуальные функции. Концепция полиморфизма. Максим Кузнецов maks.kuznetsov@gmail.com 22-23.03.2013 http://ilab.mipt.ru Содержание лекции

Подробнее

Перегрузка операторов

Перегрузка операторов Перегрузка операторов На самом деле: определение действий операторов для пользовательских типов путём определения функций-операторов Это произведение доступно по лицензии Creative Commons Attribution-ShareAlike

Подробнее

ООП основано на трех принципах: полиморфизм, наследование и инкапсуляция. Инкапсуляцию разобрали в прошлой лекции. Рассмотрим наследование.

ООП основано на трех принципах: полиморфизм, наследование и инкапсуляция. Инкапсуляцию разобрали в прошлой лекции. Рассмотрим наследование. Наследование. ООП основано на трех принципах: полиморфизм, наследование и инкапсуляция. Инкапсуляцию разобрали в прошлой лекции. Рассмотрим наследование. В С++ иерархия объектов реализована в концепции

Подробнее

Языки и методы программирования. Электронные тесты промежуточного контроля знаний

Языки и методы программирования. Электронные тесты промежуточного контроля знаний МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика

Подробнее

Концепции языков программирования

Концепции языков программирования Объектно-ориентированные языки программирования Темы 1 История 2 3 4 5 История Абстракция данных: SIMULA 67 (1962 1967) Спроектирован в Норвегии Нигардом и Далем, главным образом, для моделирования сложных

Подробнее

Язык программирования Си++ Семинар 3. Наследование и полиморфизм

Язык программирования Си++ Семинар 3. Наследование и полиморфизм Язык программирования Си++ Иванов А.П., Князева О.С. Семинар 3. Наследование и полиморфизм Для эффективной разработки программ удобно использовать иерархическое упорядочение понятий и объектов. Такое упорядочение

Подробнее

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ШАБЛОНЫ ФУНКЦИЙ 2 3 ШАБЛОНЫ ФУНКЦИЙ При создании функций иногда возникают ситуации, когда две функции выполняют одинаковую обработку, но работают с разными типами

Подробнее

Лекция 8. Объектно-ориентированное программирование.

Лекция 8. Объектно-ориентированное программирование. http://compscicenter.ru 1/17 Лекция 8. Объектно-ориентированное программирование. Александр Смаль CS центр 5 ноября 2014 Санкт-Петербург http://compscicenter.ru 2/17 Ещё раз об ООП Объектно-ориентированное

Подробнее

Перегрузка функций. О перегрузке можно говорить только для функций из одной области описания

Перегрузка функций. О перегрузке можно говорить только для функций из одной области описания Перегрузка функций О перегрузке можно говорить только для функций из одной области описания Перегрузка: struct A { int f (int x); // две функции с одинаковым именем в одной области int f (char x); // описания;

Подробнее

Шаблоны. 1. Механизм шаблонов реализует в С++ параметрический полиморфизм.

Шаблоны. 1. Механизм шаблонов реализует в С++ параметрический полиморфизм. Шаблоны 1. Механизм шаблонов реализует в С++ параметрический полиморфизм. 2. Шаблон представляет собой предварительное описание функции или класса, конкретное представление которых зависит от параметров

Подробнее

Лабораторная работа 1

Лабораторная работа 1 Лабораторная работа 1 Объектно-ориентированное программирование ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ УНИВЕРСИТЕТ ФАКУ ЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И МЕХАТРОНИКИ Кафедра информационных технологий

Подробнее

Лекция 3. Операции и функции свободной памяти

Лекция 3. Операции и функции свободной памяти Название Лекция 3. и функции свободной памяти Проектирование ПО на C ++ 25 сентября 2010 г. Лекция 3 1 / 33 Объявления функций, использующих исключения Реализация функций выделения памяти Реализация обработчика

Подробнее

Ключевые слова языка С#

Ключевые слова языка С# 1 abstract, см. также 11, 55 2 as, см. также 37 Ключевые слова языка С# Модификатор abstract используется при объявлении класса, метода или свойства. Использование модификатора abstract в объявлении класса

Подробнее

Концепции языков программирования

Концепции языков программирования Объектно-ориентированные языки программирования: специализация наследованием, абстрактные классы, динамическое связывание и полиморфизм Темы 1 Специализация наследованием 2 3 4 5 Специализация наследованием

Подробнее

Тема 2.1 Пакетирование, наследование и полиморфизм

Тема 2.1 Пакетирование, наследование и полиморфизм Тема 2.1 Пакетирование, наследование и полиморфизм Наследование в C++ Наследование классов мощная возможность в объектноориентированном программировании. Оно позволяет создавать производные классы (классы

Подробнее

4. Понятие класса. Программа 7. Класс Box

4. Понятие класса. Программа 7. Класс Box 4. Понятие класса Класс определяет новый тип данных, используя который можно определять переменные этого типа, которые называются объектами или экземплярами класса. Объявление класса имеет вид: class classname

Подробнее

Лабораторная работа 3

Лабораторная работа 3 Лабораторная работа 3 Тема:"Классы. Конструкторы и деструкторы." 1. Освоить на практике создание пользовательских типов. 2. Выяснить назначение и принципы работы конструкторов и деструкторов, а также экспериментально

Подробнее

Шаблоны C++ Абстрактное программирование

Шаблоны C++ Абстрактное программирование Абстрактное программирование Это произведение доступно по лицензии Creative Commons Attribution-ShareAlike ( Атрибуция На тех же условиях ) 3.0 Непортированная. http://creativecommons.org/licenses/by-sa/3.0/deed.ru

Подробнее

Классы, объекты и пакеты в Java

Классы, объекты и пакеты в Java Классы, объекты и пакеты в Java Алексей Владыкин 3 октября 2012 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 1 / 42 1 Основы ООП 2 Объявление класса 3 Использование класса 4 Наследование

Подробнее

ÀÑÒÜ I. ÏÅÐÂÎÅ ÇÍÀÊÎÌÑÒÂÎ Ñ C++

ÀÑÒÜ I. ÏÅÐÂÎÅ ÇÍÀÊÎÌÑÒÂÎ Ñ C++ Ñîäåðæàíèå Введение 16 О чем эта книга 16 Прилагаемый компакт-диск 16 Что такое C++ 17 Соглашения, используемые в книге 17 Как организована эта книга 18 И еще... 18 Часть I. Первое знакомство с C++ 18

Подробнее

Лекция 12. Шаблоны, часть вторая

Лекция 12. Шаблоны, часть вторая http://compscicenter.ru 1/10 Александр Смаль CS центр 18 ноября 2015 Санкт-Петербург http://compscicenter.ru 2/10 Полная специализация шаблонов: классы struct Array {... T * data_ ; ; template struct

Подробнее

Лекция 14. Полиморфизм

Лекция 14. Полиморфизм Название Полиморфизм Лекция 14. Полиморфизм Объектно-ориентированное программирование на C ++ 13 декабря 2009 г. Лекция 14 1 / 37 Полиморфизм Название Полиморфизм Пример struct C1 void f() cout

Подробнее

Абстрактные классы и методы

Абстрактные классы и методы Абстрактные классы и методы Абстрактные методы Абстрактные классы Расширение абстрактных классов Интерфейсы «Множественное наследование» в Java Вложенные интерфейсы Абстрактные классы и методы В ряде ситуаций

Подробнее

Обобщения. Основные понятия

Обобщения. Основные понятия Обобщения. Основные понятия Термин «обобщение», по существу, означает параметризированный тип. Особая роль параметризированных типов состоит в том, что они позволяют создавать классы, структуры, интерфейсы,

Подробнее

Задание 1. Ваша программа должна выполнять следующие действия:

Задание 1. Ваша программа должна выполнять следующие действия: Задание 1. Цель: Конструирование пользовательского типа данных структур, создание массива структур в динамической памяти, ввод исходных данных из файла, запись результатов работы в файл. Задание: Создать

Подробнее

Ответы на вопросы экзамена по курсу «Языки программирования»

Ответы на вопросы экзамена по курсу «Языки программирования» ы на вопросы экзамена по курсу «Языки программирования» 19.01.2015 В ответах курсивом выделены необязательные пояснения, которые можно опустить (особенно на экзамене) Вариант 1 Задача 1-1 Что означает

Подробнее

Функции ref out определении вызове Main()

Функции ref out определении вызове Main() Функции Функции представляют собой блоки кода, позволяющие выполнять одни и те же операции над различными значениями данных. Функции определяются один раз и могут вызываться из любой точки приложения.

Подробнее

МИНОБРНАУКИ РОССИИ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАТИКИ

МИНОБРНАУКИ РОССИИ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАТИКИ МИНОБРНАУКИ РОССИИ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАТИКИ Рабочая программа дисциплины (модуля) Программирование 4 (ООП С++) Направление подготовки 010300 Фундаментальная информатика

Подробнее

СЕРИЯ ПРОСТО О СЛОЖНОМ СЕРИЯ

СЕРИЯ ПРОСТО О СЛОЖНОМ СЕРИЯ СЕРИЯ ПРОСТО О СЛОЖНОМ СЕРИЯ Наука и Техника Санкт-Петербург 2016 Васильев А. Н. Объектноориентированное программирование НА С++ Наука и Техника Санкт-Петербург 2016 ISBN 978-5-94387-984-5 УДК 004.438

Подробнее

Лекция 2. Основные понятия объектно-ориентированного подхода: объекты, классы и методы и их реализация в С#

Лекция 2. Основные понятия объектно-ориентированного подхода: объекты, классы и методы и их реализация в С# Лекция 2. Основные понятия объектно-ориентированного подхода: объекты, классы и методы и их реализация в С# В лекции рассмотрены вопросы, относящиеся к идеологии, методологии и практике моделирования основных

Подробнее

Простейшая программа Hello, world!

Простейшая программа Hello, world! Простейшая программа Hello, world! // System.out.println("Привет, мир!"); Обязательные требования: 1) Имя файла, содержащего код программы, должно совпадать с именем класса 2) Файл должен иметь расширение.java

Подробнее

Язык программирования Си++ Семинар 9. Зачет: методика его проведения, теоретический минимум и типовые задания.

Язык программирования Си++ Семинар 9. Зачет: методика его проведения, теоретический минимум и типовые задания. Язык программирования Си++ Иванов А.П., Князева О.С. Семинар 9. Зачет: методика его проведения, теоретический минимум и типовые задания. Зачет проводится в практикуме и состоит из двух частей: теоретической

Подробнее

Методические указания для выполнения лабораторных работ по дисциплине «Объектно-ориентированный анализ и программирование»

Методические указания для выполнения лабораторных работ по дисциплине «Объектно-ориентированный анализ и программирование» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Владимирский государственный университет имени Александра Григорьевича

Подробнее

Содержание. Часть I. Основы 29. Предисловие 17. Благодарности 18. Глава 1. Об этой книге 21. Глава 2. Шаблоны функций 31. Глава 3. Шаблоны классов 43

Содержание. Часть I. Основы 29. Предисловие 17. Благодарности 18. Глава 1. Об этой книге 21. Глава 2. Шаблоны функций 31. Глава 3. Шаблоны классов 43 Содержание Предисловие 17 Благодарности 18 Глава 1. Об этой книге 21 1.1. Что необходимо знать, приступая к чтению этой книги 22 1.2. Структура книги в целом 22 1.3. Как читать эту книгу 23 1.4. Некоторые

Подробнее

Друзья класса. Друг класса это функция, не являющаяся членом этого класса, но имеющая доступ к его private и protected членам.

Друзья класса. Друг класса это функция, не являющаяся членом этого класса, но имеющая доступ к его private и protected членам. Друзья класса Друг класса это функция, не являющаяся членом этого класса, но имеющая доступ к его private и protected членам. Своих друзей класс объявляет сам в любой зоне описания класса с помощью служебного

Подробнее

Объектно-ориентированное

Объектно-ориентированное 10 Объектно-ориентированное программирование Большая часть профессиональных программ пишется на языках объектно-ориентированного программирования (Object-Oriented Programming, OOP), таких как Java, C#

Подробнее

Лекция 5. Описание классов

Лекция 5. Описание классов Название Лекция 5. Описание классов Объектно-ориентированное программирование на C ++ 26 апреля 2010 г. Лекция 5 1 / 26 Поля Начало Поля Функции Типы Шаблоны Элементы описания Поля статические/нестатические:

Подробнее

Часть I Основы. Зачем нужны шаблоны

Часть I Основы. Зачем нужны шаблоны Часть I Основы Эта часть книги знакомит читателя с общими концепциями и языковыми средствами шаблонов C++. Она начинается с обсуждения основных задач и концепций на примерах шаблонов функций и шаблонов

Подробнее

Введение в ООП на C++: классы, объекты, поля, методы, операторы

Введение в ООП на C++: классы, объекты, поля, методы, операторы Введение в ООП на C++: классы, объекты, поля, методы, операторы А. Г. Фенстер, fenster@fenster.name 17 сентября 2010 г. Конспект семинара 1 по объектно-ориентированному программированию. Пожалуйста, не

Подробнее

Теория и технология программирования Основы программирования на языках C и C++

Теория и технология программирования Основы программирования на языках C и C++ Теория и технология программирования Основы программирования на языках Лекция 17. Стандарты и реализации Глухих Михаил Игоревич, к.т.н., доц. mailto: glukhikh@mail.ru Основные стандарты и реализации Язык

Подробнее

Содержание. Часть I. Погружение в С++ Глава 1. Введение и настройка среды разработки...20

Содержание. Часть I. Погружение в С++ Глава 1. Введение и настройка среды разработки...20 Содержание Часть I. Погружение в С++ Глава 1. Введение и настройка среды разработки...20 Что такое язык программирования?...20 В чем различие между C и C++?.........................................21 Обязательно

Подробнее

РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ. Объектно-ориентированное программирование

РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ. Объектно-ориентированное программирование МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ Федеральное государственное бюджетное образовательное учреждение высшего образования «ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Подробнее

Классы и объекты. ООП (объектно ориентированное программирование) - парадигма программирования в которой

Классы и объекты. ООП (объектно ориентированное программирование) - парадигма программирования в которой Классы и объекты ООП (объектно ориентированное программирование) - парадигма программирования в которой основными концепциями являются понятия объектов и классов. Класс (lat. группа ) - группа явлений

Подробнее

Программирование с использованием C++11

Программирование с использованием C++11 Программирование с использованием C++11 Полевой Дмитрий Валерьевич к.т.н., доцент КиК e-mail: oop.misis@gmail.com Массив (встроенный) составной пользовательский тип тип T[size] тип массив из size элементов

Подробнее

Методическое пособие по теме «Отношения между классами С++»

Методическое пособие по теме «Отношения между классами С++» С сайта www.malshakov.ru Московский авиационный институт (технический исследовательский университет) Кафедра 403 Электронно-вычислительные средства и информатика Методическое пособие по теме «Отношения

Подробнее

4 Классы. 4.1 Основы классов

4 Классы. 4.1 Основы классов 4 Классы Класс центральный компонент Java. Поскольку класс определяет форму и сущность объекта, он является той логической конструкцией, на основе которой построен весь язык. Как таковой, класс образует

Подробнее

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014.

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014. Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP Осень-Зима 2014 Лекция 7 PHP Основы ООП Автор: Дмитрий Левин, Senior PHP Developer,

Подробнее

Концепция перемещений (move) (C++11)

Концепция перемещений (move) (C++11) Концепция перемещений (move) (C++11) В стандарт C++11 введены перемещающие конструктор и оператор присваивания, для более оптимального управления объектами Пример I: функция обмена для двух стеков void

Подробнее

ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ

ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ Министерство образования Республики Беларусь Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники» Кафедра информатики А.А. Волосевич ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ

Подробнее

Объектно-ориентированное программирование. Лекция 13

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

Подробнее

Тема 1.1 Базовые типы и агрегаты данных в языке «С»

Тема 1.1 Базовые типы и агрегаты данных в языке «С» Тема 1.1 Базовые типы и агрегаты данных в языке «С» В языке программирования С присутствуют следующие типы данных: Тип Типичный размер в битах Минимально допустимый диапозон значений char 8 от -127 до

Подробнее

Содержание ВВЕДЕНИЕ... 3 ЛАБОРАТОРНАЯ РАБОТА 1. НАЧАЛЬНЫЕ СВЕДЕНИЯ ОБ ИНТЕГРИРОВАННЫХ

Содержание ВВЕДЕНИЕ... 3 ЛАБОРАТОРНАЯ РАБОТА 1. НАЧАЛЬНЫЕ СВЕДЕНИЯ ОБ ИНТЕГРИРОВАННЫХ Содержание ВВЕДЕНИЕ... 3 ЛАБОРАТОРНАЯ РАБОТА 1. НАЧАЛЬНЫЕ СВЕДЕНИЯ ОБ ИНТЕГРИРОВАННЫХ СРЕДАХ РАЗРАБОТКИ ПРОГРАММ... 5 Работа в интегрированной среде разработки программ MS Visual Studio 2008, работающей

Подробнее

Глава 15 Делегаты БИЛЛ ВАГНЕР ЭРИК ЛИППЕРТ

Глава 15 Делегаты БИЛЛ ВАГНЕР ЭРИК ЛИППЕРТ Глава 15 Делегаты Делегаты предназначены для случаев, в которых C++, Pascal и Modula используют указатели на функции. В отличие от последних в C++ делегаты являются полностью объектно-ориентированными.

Подробнее

Программирование с использованием наследования классов и виртуальных функций

Программирование с использованием наследования классов и виртуальных функций Лабораторная работа 2 Программирование с использованием наследования классов и виртуальных функций Цель работы: 1) изучить возможности наследования классов на языке С++; 2) получить основные навыки программирования

Подробнее

Инкапсуляция и сокрытие данных Наследование Полиморфизм. Основа ООП - абстрагирование, создание типов, определенных пользователем

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

Подробнее

1. Подобъекты. Отношения включения между объектами

1. Подобъекты. Отношения включения между объектами 1. Подобъекты. Отношения включения между объектами Пусть определен такой класс: A a; Говорят, что a включает b и c, или a состоит из b и c, или b и c являются частью a. (?) В какой момент вызываются конструкторы

Подробнее

Комплект учебно-программной документации. «Технология ООП и основы программирования на С++»

Комплект учебно-программной документации. «Технология ООП и основы программирования на С++» Комплект учебно-программной документации «Технология ООП и основы программирования на С++» УЧЕБНАЯ ПРОГРАММА «Технология ООП и основы программирования на С++» Цель курса: Ознакомить слушателей с основами

Подробнее

Перегрузка функций. О перегрузке можно говорить только для функций из одной области описания

Перегрузка функций. О перегрузке можно говорить только для функций из одной области описания Перегрузка функций О перегрузке можно говорить только для функций из одной области описания Перегрузка: struct A { int f (int x); // две функции с одинаковым именем в одной области int f (char x); // описания;

Подробнее

Эта глава предлагает молниеносное турне на тему возможностей языка C#. Да,

Эта глава предлагает молниеносное турне на тему возможностей языка C#. Да, Глава 3 Краткий обзор языка C# Эта глава предлагает молниеносное турне на тему возможностей языка C#. Да, мы уже слышим ваши возражения: Но ведь просто невозможно сжать всю информацию о C# в одну главу!

Подробнее

Проектирование больших систем на C++

Проектирование больших систем на C++ Проектирование больших систем на C++ Коноводов В. А. кафедра математической кибернетики ВМК Лекция 6 13.10.2017 Операторы new и delete Зачем они нужны? #include class C { public: int arr[100];

Подробнее

Структурные типы данных

Структурные типы данных Структурные типы данных Классы и структуры являются двумя основными конструкциями системы общих типов CTS (Common Type System) в платформе.net Framework. Каждая по сути является структурой данных, объединяющей

Подробнее

Контрольная работа. Конструирование простейшего класса

Контрольная работа. Конструирование простейшего класса Контрольная работа Конструирование простейшего класса При выполнении контрольной работы студент должен продемонстрировать умение сконструировать класс с заданным набором данных, создать объекты на основе

Подробнее

1.1. Ввод данных Выделение текста с помощью рамочки Резюме 32 Упражнения 34

1.1. Ввод данных Выделение текста с помощью рамочки Резюме 32 Упражнения 34 СОДЕРЖАНИЕ ВВЕДЕНИЕ 15 Новый подход к программированию на C++ 15 Наша книга полезна как для новичков, так и для опытных программистов 15 Абстракция 16 Охват материала 16 Несколько слов для опытных C- и

Подробнее

2. Наследование. В такой иерархии:

2. Наследование. В такой иерархии: 2. Наследование В такой иерархии: класс Base называют базовым классом, суперклассом или предком. Класс Derived соответственно называют производным классом (подклассом), субклассом или потомком. ( П ) Примеры

Подробнее

Динамическое выделение памяти и исключения в С++

Динамическое выделение памяти и исключения в С++ Лабораторная работа 4 Динамическое выделение памяти и исключения в С++ Цель работы: 1) изучить менеджер памяти С++ 2) изучить различные способы обработки исключений; 3) получить практические навыки программирования

Подробнее

4.6 Перегрузка. Эта программа создает следующий вывод.

4.6 Перегрузка. Эта программа создает следующий вывод. 4.6 Перегрузка 4.6.1 Перегрузка методов Язык Java разрешает определение внутри одного класса двух или более методов с одним именем, но различными типами и числом параметров. В этом случае методы называют

Подробнее

Лекция 3. Использование динамической памяти

Лекция 3. Использование динамической памяти Название Виды памяти Лекция 3. Использование динамической памяти Метапрограммирование в C ++ 17 февраля 2017 г. Лекция 3 1 / 30 Название Виды памяти Виды памяти в программе на C ++ Название Хранимые объекты

Подробнее

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

Иногда возникает потребность описывать и применять к созданным программистом типам данных операции, по смыслу эквивалентные уже имеющимся в языке 2013 Иногда возникает потребность описывать и применять к созданным программистом типам данных операции, по смыслу эквивалентные уже имеющимся в языке 2 Перегрузка операций предполагает введение в язык

Подробнее

Объявление функций в С/С++

Объявление функций в С/С++ Объявление функций в С/С++ Описание функций в отдельных файлах В С++ существует возможность поместить объявления функций в отдельный файл, тогда необходимо будет подключать файл с функциями, как в случае

Подробнее

Эффективность различных конструкций языка C++ (по мотивам книги «Optimizing software in C++» by Agner Fog)

Эффективность различных конструкций языка C++ (по мотивам книги «Optimizing software in C++» by Agner Fog) Эффективность различных конструкций языка C++ (по мотивам книги «Optimizing software in C++» by Agner Fog) Различные способы хранения переменных Переменные и объекты хранятся в различных частях памяти

Подробнее

Глава 1 Типы данных, переменные и константы

Глава 1 Типы данных, переменные и константы Глава 1 Типы данных, переменные и константы 1 Языки C и C++ предлагают программисту богатый ассортимент встроенных типов данных. При этом для удовлетворения практически любых нужд могут быть созданы типы

Подробнее

Программирование в C++ Преподаватель Колотова Людмила Павловна

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 9-го занятия по практике Указатели. Адреса и указатели. Указатель на void Указатели и массивы. Указатели и строки Диаграммы UML

Подробнее

Лекция 7. Введение в шаблоны

Лекция 7. Введение в шаблоны Название Лекция 7. Введение в шаблоны Объектно-ориентированное программирование на C ++ 11 ноября 2009 г. Лекция 7 1 / 25 Основные определения Виды шаблонов Шаблон: конструкция языка, определяющая семейство

Подробнее

Основы объектноориентированного. программирования (ООП)

Основы объектноориентированного. программирования (ООП) Основы объектноориентированного программирования (ООП) Объект и класс Основными элементами программы являются не переменные и методы (процедуры), а объекты. Объекты это программные конструкции, включающие

Подробнее

Основы платформы Microsoft.NET

Основы платформы Microsoft.NET Основы платформы Microsoft.NET Тема: Управление памятью Переменные величины и ссылки...1 Выделение памяти...2 Удаление объектов из памяти...4 Дефрагментация кучи...4 Поколения объектов...5 Деструкторы...7

Подробнее

о значениях и ссылках

о значениях и ссылках 8 Основные сведения о значениях и ссылках Прочитав эту главу, вы научитесь: ¾ объяснять разницу между типом значений и типом ссылок; ¾ изменять способ передачи аргументов в качестве параметров методов

Подробнее

ПОСТРОЕНИЕ МОДЕЛИ ДАННЫХ ПРОГРАММЫ ПО ИСХОДНОМУ КОДУ Г.А. Корнеев Научный руководитель А.А. Шалыто

ПОСТРОЕНИЕ МОДЕЛИ ДАННЫХ ПРОГРАММЫ ПО ИСХОДНОМУ КОДУ Г.А. Корнеев Научный руководитель А.А. Шалыто Опубликовано в научно-техническом вестнике СПбГУ ИТМО. 2006, 25. c. 102 110. ПОСТРОЕНИЕ МОДЕЛИ ДАННЫХ ПРОГРАММЫ ПО ИСХОДНОМУ КОДУ Г.А. Корнеев Научный руководитель А.А. Шалыто В работе предлагается метод

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 8

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 8 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017 Лекция 8 1 Указатели & - операция адресации * - операция разыменования int a = 1; int *p; p = &a; *p = 2; printf ("Значение переменной a = %d\n",

Подробнее

объектно-ориентированного программирования

объектно-ориентированного программирования Основные принципы объектно-ориентированного программирования В объектно-ориентированной технологии используется особый подход к разработке программ, основанный на использовании объектных моделей и нескольких

Подробнее

Лекция 9. Терновой Максим Юрьевич к.т.н., с.н.с., доцент кафедры информационнотелекоммуникационных

Лекция 9. Терновой Максим Юрьевич к.т.н., с.н.с., доцент кафедры информационнотелекоммуникационных Технологии программирования Зима-Весна Лекция 9 Терновой Максим Юрьевич к.т.н., с.н.с., доцент кафедры информационнотелекоммуникационных сетей Вопросы, рассматриваемые на лекции 1. Частные (private) элементы

Подробнее

1. Введение. 1.1 Объектно-ориентированный подход. В настоящее время в программировании существуют четыре принципиально отличающихся подхода:

1. Введение. 1.1 Объектно-ориентированный подход. В настоящее время в программировании существуют четыре принципиально отличающихся подхода: 1. Введение 1.1 Объектно-ориентированный подход В настоящее время в программировании существуют четыре принципиально отличающихся подхода: процедурный (алгоритмический), логический (декларативный), функциональный,

Подробнее

Стандартная библиотека шаблонов (STL)

Стандартная библиотека шаблонов (STL) Лабораторная работа 8 Стандартная библиотека шаблонов (STL) Цель работы: изучить правила работы со стандартными шаблонами в С++. Теоретические сведения Стандартная библиотека шаблонов (STL) (англ. Standard

Подробнее

Введение в объектно-ориентированное программирование.

Введение в объектно-ориентированное программирование. Лабораторная работа 12 Введение в объектно-ориентированное программирование. Цель работы. Изучение основ объектно-ориентированного программирования на языке Java. Содержание работы. В работе рассматриваются

Подробнее

Проектирование больших систем на C++

Проектирование больших систем на C++ Проектирование больших систем на C++ Коноводов В. А. кафедра математической кибернетики ВМК Лекция 2 15.09.2017 Пример с теста Задача. Напишите код, который удалит из вектора int-ов элементы, равные 0.

Подробнее

Отзывы о третьей редакции Эффективного использования C++

Отзывы о третьей редакции Эффективного использования C++ Отзывы о третьей редакции Эффективного использования C++ Книга Скотта Мейерса «Эффективное использование C++», третья редакция это концентрация опыта программирования того опыта, который без нее достался

Подробнее

Содержание. Благодарности Предисловие... 12

Содержание. Благодарности Предисловие... 12 Содержание Благодарности... 11 Предисловие... 12 Урок 1. Первая программа... 20 1.1. Внешний вид и назначение приложения Умножитель... 20 1.2. Знакомство с визуальным программированием... 21 1.2.1. Форма...

Подробнее