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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

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

Транскрипт

1 Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. 1. Статическая (static) переменная класса Добавим в определение класса статическую переменную: private: // double x; double y; static int num;// описание статической переменной целого типа num ; В отличие от автоматических (обычных) переменных статическая переменная возникает не в момент создания объекта, а при запуске программы, при условии явного объявления этой переменной (вне класса), например: int Vector::num; int main() По умолчанию при объявлении статическая переменная получает нулевое значение, но ее можно в явном виде инициализировать любым константным выражением: int Vector::num = 1; Особенностью статической переменной является то, что она не дублируется при создании объекта, а создается в единственном экземпляре. Можно сказать, что переменная принадлежит самому классу, а не объектам, создаваемым на его основе. 2. Статический метод Метод, объявленный с ключевым словом static, называется статическим. Такой метод вызывается не объектом (соответственно не получает в распоряжение указатель this и не имеет прямого доступа к нестатическим элементам данных класса), а как обычная функция из любого места программы, но с учетом модификаторов доступа. Скажем, private static метод может быть вызван другими методами класса (в том числе статическими), но не может быть вызван извне класса. Публичный статический метод может быть вызван из любого места программы, даже если ни один объект класса не был создан: // static void ShowNam(); ; 3. Открытое наследование классов int main() Vector::ShowNam(); Наследование классов является одним из основных механизмов реализации концепции повторного использование кода. Этот механизм позволяет конструировать из имеющихся

2 (базовых) классов новые (производные) классы. При этом производный класс наследует свойства, включая методы, базового класса. Предположим, у нас есть класс Vector (см. п.1). Мы хотим иметь возможность создавать объекты с аналогичными свойствами, но для каждого созданного вектора хранить его уникальное символьное имя. В этом случае новый объект будет одновременно являться и объектом класса Vector (но с дополнительными свойствами). Такой тип наследования называется «as a» - «является», и в Си++ может быть реализован с помощью открытого (public) наследования классов. Назовем новый класс NamedVector и при его объявлении укажем, что он является наследником базового класса Vector: class NamedVector: public Vector private: static const int Len = 40; char name[len]; NamedVector(const char *); NamedVector::NamedVector(const char * str) strncpy(name, str, Len); NamedVector nv("vector 1"); nv.show(); Результат программы: 1, 0 private: double x; double y; void show(); Vector(); void Vector::show() cout << x << ", " << y; Vector::Vector() x = 1.; y = 0.; В объявлении производного класса после «:» указывается имя базового класса. Модификатор public перед этим именем говорит об открытом характере наследования, в результате которого публичные (и защищенные) данные и методы базового класса становятся напрямую доступными для объектов производного класса. Однако частные элементы данных (x, y) и методы доступны только через публичные методы базового класса. В этом смысле говорят, что производный класс наследует интерфейс базового класса. В данном примере в производный класс NamedVector добавлен дополнительный элемент данных массив name типа char для хранения имени вектора. Статическая константа Len объявлена для ее использования в качестве символьной константы (для удобства). Также описан конструктор класса, принимающий в качестве аргумента константный указатель на строку символов с именем создаваемого вектора. В функции main() демонстрируется создание объекта класса NamedVector и использование унаследованного от базового класса метода show(). Что не наследуются? Конструкторы. Конструкторы производного класса обычно обращаются к конструкторам базового класса через список инициализаторов. Деструкторы. Однако при удалении объекта производного класса в начале вызывается его деструктор, а затем деструктор базового класса. 2

3 Оператор присваивания. Компилятор автоматически обеспечивает производный класс собственным оператором присваивания, в котором для присваивания элементов базового класса вызывается его оператор присваивания. Конструкторы (и деструктор), в отличие от обычных методов, не наследуются. В производном классе либо в явном виде объявляются собственные конструкторы, либо неявно используется конструктор по умолчанию. Тем не менее, создание объекта производного класса начинается с неявного создания объекта базового класса и вызова его конструктора. Это позволяет инициализировать недоступные напрямую частные (скрытые) элементы, унаследованные из базового класса. Если не указано в явном виде (как в примере), то вызывается конструктор базового класса по умолчанию (без параметров). Через «:» в качестве списка инициализаторов можно в явном виде указать необходимый конструктор базового типа: class NamedVector: public Vector private: static const int Len = 40; char name[len]; NamedVector(const char *); NamedVector(double,double,const char *); Vector::Vector(double xx, double yy) x = xx; y = yy; NamedVector::NamedVector(double x, double y, const char * str):vector(x,y) strncpy(name, str, Len); NamedVector nv(3, 4, "Vector 1"); nv.show(); Результат программы: 3, 4 В приведенном примере при создании объекта производного класса NamedVector с помощью конструктора с тремя параметрами конструктор базового класса Vector вызывается с двумя параметрами. При уничтожении объекта производного класса последовательность вызовов деструкторов обратная: вначале вызывается деструктор производного класса, затем базового. В производном классе метод show() базового класса можно переопределить, чтобы выводить не только значения унаследованных элементов данных x и y, но и новый элемент name: class NamedVector: public Vector void show(); void NamedVector::show() Vector::show(); cout << name << endl; NamedVector nv(3, 4, "Vector 1"); nv.show(); Результат: 3, 4 Vector 1 3

4 Для вызова в методе show() производного класса метода show() базового класса используется оператор принадлежности ::. В противном случае возникнет рекурсивный вызов переопределенного метода. Переопределение метода не является разновидностью перегрузки. Переопределенный в производном классе метод независимо от сигнатуры скрывает все методы базового класса с тем же именем. 4. Указатели и ссылки на объекты базового и производного классов Так как класс может рассматриваться как новый тип данных, то должны существовать и указатели этого типа. Например, можно присвоить переменной типа указателя (или ссылки) на класс адрес объекта данного класса и затем, используя этот указатель (или ссылку), вызывать методы (или обращаться к элементам данных) этого класса. Синтаксис обращения к элементам данных по ссылке аналогичен синтаксису обращения к элементам структуры по ее имени (через точку). Синтаксис обращения к элементам данных и методам по указателю на объект так же ничем не отличается от синтаксиса обращения к элементам структуры по указателю: NamedVector nv(3, 4, "Vector 1");// сам объект NamedVector *nvp = &nv; // указатель на объект NamedVector &nvr = nv; // ссылка на объект nvp->show(); // Результат: 3, 4 Vector 1 nvr.show(); // Результат: 3, 4 Vector 1 При наследовании указателю на объект базового типа допускается присваивать адрес объекта производного типа (но не наоборот, если только не объявлено соответствующее преобразование типов): NamedVector nv(3, 4, "Vector 1"); Vector *nvp = &nv; 5. Виртуальные методы nvp->show(); // Результат: 3, 4 Полученный в предыдущем примере результат свидетельствует о том, что, несмотря на то, что указатель указывает на объект производного класса, вызывается при этом метод show() базового класса! Это есть следствие раннего связывания на этапе компиляции. Компилятор, видя, что указатель имеет тип указателя на базовый класс, обеспечивает вызов метода базового класса. Так как узнать, на какой именно объект (базового или производного класса) ссылается такой указатель можно только при выполнении программы, то для вызова нужно метода необходимо организовать позднее связывание. В Си++ это делается путем объявления метода базового класса виртуальным. Например, объявив в базовом классе метод show() виртуальным: virtual void show(); 4

5 мы добьемся того, что в главной функции предыдущего примера будет вызван метод show() производного класса. Объявление в базовом классе некоторого метода виртуальным автоматически делает его виртуальным и в производном классе. Это имеет значение, если производный класс, в свою очередь, используется как базовый для нового класса. 6. Виртуальный деструктор Предположим мы хотим для хранения имени вектора в производном классе NamedVector не резервировать статический массив из 40 элементов, а выделять в конструкторе память динамически с помощью оператора new[]. В деструкторе класса для освобождения памяти следует использовать оператор delete []. Теперь предположим, что мы создаем новый объект класса NamedVector, присваивая его адрес указателю типа Vector: Vector *vp = new NamedVector("Вектор 2"); В тот момент, когда нам будет нужно освободить память и уничтожить созданный объект: delete vp; какой деструктор будет вызван? При раннем связывании деструктор базового класса Vector, который знать ничего не знает про освобождение памяти, динамически выделенной в конструкторе производного класса. Для вызова деструктора производного класса нужно использовать позднее связывание, а для этого объявить деструктор базового класса виртуальным: virtual ~Vector(); Правило здесь следующее. Если класс предполагается использовать в качестве базового, то его деструктор всегда следует объявлять виртуальным. 7. Абстрактные базовые классы Возможна ситуация, когда имеет смысл в базовом классе максимально подробно описать интерфейсы, но реализовывать эти интерфейсы и создавать объекты базового класса необходимости нет. Т.е. данный класс не предполагается использовать как самостоятельный, а только в качестве базового для производных классов, которые будут снабжены конкретными реализациями интерфейса. Такой класс называется абстрактным базовым. Чтобы описать в абстрактном классе нереализованный метод используют чисто виртуальные функции. Чисто виртуальная функция это виртуальная функция, содержащая последовательность = 0 в конце своего объявления, например: virtual void show() = 0; Чисто виртуальная функция не требует (хотя и допускает) наличия реализации. Если в описании класса есть хотя бы одна чисто виртуальная функция, он автоматически превращается в абстрактный без возможности создания объектов этого класса. 8. Защищенный доступ Элементы данных или методы класса могут быть объявлены не только частными (private) или общедоступными (public), но и защищенными (protected). Защищенные элементы проявляют себя как частные для внешнего мира (т.е. напрямую недоступны), но являются доступными в производных от данного класса классах. 5

6 Например, если элемент y в классе Vector объявить защищенным private: // double x; protected: double y; то он по-прежнему будет недоступен в главной функции, но к нему могут напрямую обращаться методы производного класса NamedVector. Vector v; cout << v.x; // ошибка, элемент не доступен cout << v.y; // ошибка, элемент не доступен void NamedVector::show() cout << x; // // ошибка, элемент не доступен cout << y; // Ok Литература. Стивен Прата. "Язык программирования Си++. Лекции и упражнения. Учебник: Пер. С англ." - ООО ДиаСофтЮП, Главы Упражнение С5_1. 1. Создайте класс, в котором предусмотрите специальный элемент данных для хранения числа созданных («живущих») объектов. 2. Напишите статический метод, который выводит это число на экран. 3. В основной функции выведите количество созданных объектов вашего класса в самом начале работы программы и после объявления массива объектов из 12 элементов. Упражнение С5_2. 1. Разработайте производный от класса Vector класс NamedVector, динамически выделяя память для хранения имени вектора. 2. Следует не забыть соответствующим образом переопределить все используемые конструкторы, включая конструктор копирования, и оператор присваивания. 3. Переопределите оператор [] (индексатор) так, чтобы для объекта класса NamedVector он возвращал символ элемента данных name, порядковый номер которого совпадает с целочисленным индексом, переданным оператору [] в качестве аргумента. Если индекс находится вне диапазона числа символов в строке name, индексатор должен возвращать символ «!». Упражнение С5_3. 1. Используя в качестве базового класс Vector, определите производный класс Vector3d, дополнив элементы данных координатой z (трехмерный вектор). 2. Определите в нем конструктор(ы) и деструктор. Переопределите метод вычисления модуля вектора, объявив соответствующий метод в базовом классе виртуальным. Переопределите операторы: +, -, +=, -=, операторы умножения «*» вектора на число и числа на вектор, оператор деления «/» вектора на число, оператор вывода <<. 6

7 Упражнение С5_4*. 1. Используя класс трехмерных векторов Vector3d, модифицируйте задачу о случайном блуждании из упражнения C3_4* для анализа блуждания в трехмерном пространстве. Направление шага должно быть случайным с равномерным распределением, как по азимуту, так и по углу места. 2. Методом Монте-Карло рассчитайте среднее число единичных шагов, которые надо совершить, чтобы достигнуть границы сферы радиуса r = 50. Сравните результаты со случаем блуждания на плоскости. 7

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

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

Подробнее

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

Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов. Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов. 1. Наследование и динамическое распределение памяти Пусть в базовом классе осуществляется

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

C++ MFC / STL / CLI.NET Visual Studio

C++ MFC / STL / CLI.NET Visual Studio C++ MFC / STL / CLI.NET Visual Studio Популярность языков (по данным tiobe.com (янв-2014) Язык программирования 2014 2009 2004 1999 1994 1989 C 1 2 2 1 1 1 Java 2 1 1 16 - - Objective-C 3 42 48 - - - C++

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

спецификатор-типа описатель [константное - выражение];

спецификатор-типа описатель [константное - выражение]; Тема : знакомство с С (Си) МАССИВЫ и ФУНКЦИИ, упражнение Содержание: массивы упражнение Массивы Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Из объявления массива компилятор

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

Введение 15 Об этой книге 15 Использованные в этой книге пиктограммы 17 Дополнительные источники информации 18 Что дальше 18 Ждем ваших отзывов!

Введение 15 Об этой книге 15 Использованные в этой книге пиктограммы 17 Дополнительные источники информации 18 Что дальше 18 Ждем ваших отзывов! Содержание Введение 15 Об этой книге 15 Использованные в этой книге пиктограммы 17 Дополнительные источники информации 18 Что дальше 18 Ждем ваших отзывов! 19 Часть I. Знакомство с C++ 21 Глава 1. Написание

Подробнее

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

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

Подробнее

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

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

Подробнее

Занятие 7 Динамические массивы и указатели. Рекурсивные функции. Строки

Занятие 7 Динамические массивы и указатели. Рекурсивные функции. Строки Занятие 7 Динамические массивы и указатели. Рекурсивные функции. Строки Программирование, численные методы и информатика А. В. Позднеев Кафедра автоматизации научных исследований Факультет вычислительной

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

Одномерные массивы. Лабораторная работа 9

Одномерные массивы. Лабораторная работа 9 Лабораторная работа 9 Одномерные массивы Массивы. Ссылочные типы и null. Часто в программах требуется завести большое количество переменных одного и того же типа. Можно, конечно, написать большое количество

Подробнее

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

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

Подробнее

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

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

Подробнее

Занятие 12 Статические и динамические массивы. Рекурсивные функции. Строки. Дополнительные материалы

Занятие 12 Статические и динамические массивы. Рекурсивные функции. Строки. Дополнительные материалы Занятие 12 Статические и динамические массивы. Рекурсивные функции. Строки. Дополнительные материалы Программирование, численные методы и информатика Александр Валерьевич Позднеев Кафедра автоматизации

Подробнее

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

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

Подробнее

Языки программирования и методы трансляции

Языки программирования и методы трансляции Языки программирования и методы трансляции Имена, связывание, области видимости 1 Время связывания 2 3 Статические области видимости Динамические области видимости Имя, область видимости и связывание Имя

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

«Утверждаю» Заведующий кафедрой /О.И.Наранович/ «29»_ г. Пр. 7

«Утверждаю» Заведующий кафедрой /О.И.Наранович/ «29»_ г. Пр. 7 «Утверждаю» Заведующий кафедрой /О.И.Наранович/ «29»_08 2016 г. Пр. 7 Вопросы к экзамену по дисциплине «Объектно-ориентированное программирование» по специальности «Информационные системы и технологии»

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 6-го занятия по практике Объекты и классы. Простой класс. Определение класса. Вызов методов класса Объекты программы и объекты

Подробнее

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

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 2 ВОПРОСЫ Чем отличается public наследование от private наследования? Что такое абстрактный класс? Каким образом реализуется механизм виртуальных функций? Какие

Подробнее

Содержание. Глава 1 Введение 21. Глава 2 Грамматика 29. Глава 3 Лексическая структура 33. Предисловие к Java SE 8 Edition 19

Содержание. Глава 1 Введение 21. Глава 2 Грамматика 29. Глава 3 Лексическая структура 33. Предисловие к Java SE 8 Edition 19 Содержание Предисловие к Java SE 8 Edition 19 Глава 1 Введение 21 1.1. Организация книги 22 1.2. Примеры программ 25 1.3. Обозначения 26 1.4. Связь с предопределенными классами и интерфейсами 26 1.5. Литература

Подробнее

// конструктор матрицы с указанием ее размеров public Matrix(int rows, int cols) { a = new double[rows, cols]; }

// конструктор матрицы с указанием ее размеров public Matrix(int rows, int cols) { a = new double[rows, cols]; } Наследование Наследование это механизм, который позволяет создавать новые классы на основе существующих, используя их структурные и поведенческие свойства поля, методы, свойства и пр. Рассмотрим далее

Подробнее

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

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

Подробнее

Курс «Алгоритмы и алгоритмические языки» 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",

Подробнее

Теоретические вопросы

Теоретические вопросы МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД «ЗАПОРІЗЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ» Спеціальність 6.040301 Прикладна математика Дисципліна «Програмування» Модульна контрольна робота

Подробнее

Web-технологии. ООП в PHP. Кулаков Кирилл Александрович. ПетрГУ,

Web-технологии. ООП в PHP. Кулаков Кирилл Александрович. ПетрГУ, Web-технологии ООП в PHP Кулаков Кирилл Александрович ПетрГУ, 2017 1 Определение базового класса Синтаксис class MyClass { // свойство класса public $var = 'значение'; // метод класса public function displayvar()

Подробнее

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

Концепции языков программирования Распределение памяти Распределение памяти 1 Статическое выделение пямяти 2 3 Распределение памяти 1 Статическое выделение пямяти 2 3 Статическое выделение пямяти Выделение памяти на этапе загрузки программы

Подробнее

Лекция 3. Концепция наследования

Лекция 3. Концепция наследования Лекция 3. Концепция наследования Рассмотрены вопросы, относящиеся к идеологии и обзору возможностей наследования - одной из фундаментальных концепций, на которых базируется объектно-ориентированное программирование

Подробнее

Перегрузка функций. Перегрузка операторов

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

Подробнее

ЛАБОРАТОРНАЯ РАБОТА 29 Создание приложения с разветвленным меню. Динамические массивы

ЛАБОРАТОРНАЯ РАБОТА 29 Создание приложения с разветвленным меню. Динамические массивы ЛАБОРАТОРНАЯ РАБОТА 29 Создание приложения с разветвленным меню. Динамические массивы Цели: научиться применять указатели; научиться работать с динамическими массивами; закрепить умение по обработке ошибок;

Подробнее

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

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

Подробнее

Занятие 12 Статические и динамические массивы. Рекурсивные функции. Строки. Дополнительные материалы

Занятие 12 Статические и динамические массивы. Рекурсивные функции. Строки. Дополнительные материалы Занятие 12 Статические и динамические массивы. Рекурсивные функции. Строки. Дополнительные материалы Программирование, численные методы и информатика Александр Валерьевич Позднеев Кафедра автоматизации

Подробнее

Как построена эта книга 14 Как пользоваться этой книгой 14 Используемые пиктограммы 15

Как построена эта книга 14 Как пользоваться этой книгой 14 Используемые пиктограммы 15 Содержание Введение 14 Как построена эта книга 14 Как пользоваться этой книгой 14 Используемые пиктограммы 15 Глава 1. Алфавит, зарезервированные слова, переменные, комментарии, константы 17 Алфавит языка

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

Вопросы для самопроверки

Вопросы для самопроверки Вопросы для самопроверки Программирование на языке С 11 ноября 2014 г. Лекция 1. Вводная 1. Какие существуют аспекты разработки ПО? Подходы к разработке? 2. Какие признаки характеризуют любительский подход?

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

Программирование на языке С++ с использованием классов.

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

Подробнее

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

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

Подробнее

Функции. Функция поименнованная часть программы, которая может вызываться из других частей программы неограниченное число раз.

Функции. Функция поименнованная часть программы, которая может вызываться из других частей программы неограниченное число раз. Функции Функция поименнованная часть программы, которая может вызываться из других частей программы неограниченное число раз. Это отдельная подпрограмма, управляемая входами и возвращающая что-то на выходе.

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее

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

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

Подробнее