Главная » Учебные материалы » Информатика » Книги » МГТУ им. Н.Э.Баумана » Несколько классов/семестров » Методические указания к выполнению лабораторных работ по дисциплине «Информатика»
Для студентов МГТУ им. Н.Э.Баумана по предмету ИнформатикаМетодические указания к выполнению лабораторных работ по дисциплине «Информатика» Методические указания к выполнению лабораторных работ по дисциплине «Информатика» 2024-02-29СтудИзба

Книга: Методические указания к выполнению лабораторных работ по дисциплине «Информатика»

Описание

Методические указания к выполнению лабораторных работ по дисциплине «Информатика»


ББК


Рекомендовано Редакционно-издательским советом

МГТУ им. Н. Э. Баумана в качестве учебного пособия.

Рецензент

кандидат технических наук, доцент

В.В. Вельтищев


Глазков, В.В., Глазкова, М.В.

Программирование на языке С++: Электронное учебное издание / В.В. Глазков, М.В. Глазкова. - издательство МГТУ имени Н.Э. Баумана, 2023. – 77 с.


ISBN

Настоящее издание содержит методические указания к лабораторным работам по информатике, целью которых является приобретение студентами знаний по программированию на базе языка C++. Методическое указание состоит из 8 лабораторных работ с 25 вариантами задач. Для каждой лабораторной работы представлены теоретические сведения по изучаемому материалу и примеры решения аналогичных задач.




УДК

ББК


© В.В. Глазков, М.В. Глазкова, 2023

© МГТУ им. Н.Э. Баумана, 2023

© Оформление. Издательство МГТУ

им. Н.Э. Баумана, 2023



Содержание

Введение. 5

1. Лабораторная работа № 1 «Классы и объекты в С++» . 6

1.1. Краткие теоретические сведения. 6

1.2. Практическое задание. 11

1.3. Контрольные вопросы.. 13

2. Лабораторная работа № 2 «Перегрузка операций и операторов в С++» . 14

2.1. Краткие теоретические сведения. 14

2.2. Практическое задание. 16

2.3. Контрольные вопросы.. 22

3. Лабораторная работа № 3 «Одиночное и множественное наследование в С++» 23

3.1. Краткие теоретические сведения. 23

3.2. Практическое задание. 25

3.3. Контрольные вопросы.. 26

4. Лабораторная работа № 4 «Виртуальные функции в С++» . 27

4.1. Краткие теоретические сведения. 27

4.2. Практическое задание. 30

4.3. Контрольные вопросы.. 30

5. Лабораторная работа № 5 «Определение и использование шаблонов функций и классов в С++» . 31

5.1 Краткие теоретические сведения. 31

5.1.1 Шаблон функции. 31

5.1.2 Шаблон класса. 32

5.1.3 Компонентные функции параметризованных классов. 33

5.2 Практическое задание. 33

5.3 Контрольные вопросы.. 37

6 Лабораторная работа № 6 «Динамические структуры данных в С++» . 40

6.1 Краткие теоретические сведения. 40

6.1.1 Связные списки. 40

6.1.2 Стек. 43

6.1.3 Очередь. 43

6.1.4 Дерево. 43

6.2 Практическое задание. 45

6.3 Контрольные вопросы.. 48

7 Лабораторная работа № 7 «Библиотека STL и ее использование» . 50

7.1 Краткие теоретические сведения. 50

7.1.1 Итераторы.. 51

7.1.2 Алгоритмы.. 51

7.1.3 Контейнеры. 52

7.1.4 Класс String. 54

7.2 Практическое задание. 56

7.3 Контрольные вопросы.. 57

8 Лабораторная работа № 8 «Библиотека Boost и ее использование» . 60

8.1 Краткие теоретические сведения. 60

8.1.1 Начало работы с библиотекой Boost60

8.1.2 Библиотека String Algo. 64

8.1.3 Библиотека StringSort71

8.2 Практическое задание. 76

8.3 Контрольные вопросы.. 76




Введение

Методические указания предназначены для выполнения студентами лабораторных работ по дисциплине «Информатика» самостоятельно и под руководством преподавателя.

Язык программирования С, разработанный в США сотрудниками фирмы Bell Laboratories в начале 70-х годов для разработки операционной системы UNIX, вместе с разработанным вслед за ним языком С++, который дополнительно к возможностям языка С включает объектно- ориентированные средства, является одним из наиболее распространенных языков программирования в мире. Первое описание языка дано его авторами Б. Керниганом и Д. Ритчи. Язык С иногда называют языком программирования «среднего» уровня. С одной стороны, язык поддерживает операции «низкого» уровня (операции над битами), а базовые типы отражают те же объекты, что и язык Ассемблера (байты, машинные слова, символы, строки). С другой стороны — имеет основные управляющие конструкции, присущие языкам «высокого» уровня. Таким образом, язык С может использоваться как для решения системных задач, так и для решения прикладных задач (хотя язык создавался, прежде всего, для системного программирования). Язык программирования С++ является расширением языка С, т.е. включает в себя основные средства языка С и новые возможности, в частности, поддерживает объектно- ориентированный подход в программировании.

Важность изучения языка С++ состоит также в том, что многие языки программирования, созданные позже для других целей, например, для разработки Интернет-приложений, наследовали основные элементы синтаксиса языка С, так называемые, С- подобные языки. К таким языкам можно отнести: Java, C#, PHP. Зная синтаксис языка С, освоить данные языки можно достаточно быстро.

Методические указания к лабораторным работам включают в себя работы по решению прикладных задач на языке С++.

1. Лабораторная работа № 1 «Классы и объекты в С++»

Цель работы: Получить практические навыки реализации классов на С++.

1.1. Краткие теоретические сведения

Класс

Класс − фундаментальное понятие С++, он лежит в основе многих свойств С++. Класс предоставляет механизм для создания объектов. В классе отражены важнейшие концепции объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм.

С точки зрения синтаксиса, класс в С++ − это структурированный тип, образованный на основе уже существующих типов. В этом смысле класс является расширением понятия структуры. В простейшем случае класс можно определить с помощью конструкции:

тип_класса имя_класса{список_членов_класса};

где тип_класса – одно из служебных слов class, struct, union;

имя_класса – идентификатор;

список_членов_класса – определения и описания типизированных данных и принадлежащих классу функций.

Методы – это функции класса, определяющие операции над объектом.

Поля – это данные объекта, образующие его структуру. Значения полей определяет состояние объекта.

Для описания объекта класса (экземпляра класса) используется конструкция имя_класса имя_объекта;

Например:

date today,my_birthday;

date *point = &today; // указатель на объект типа date

date clim[30]; // массив объектов

date &name = my_birthday; // ссылка на объект

В определяемые объекты входят данные, соответствующие членам-данным класса. Функции-члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Первый с помощью “квалифицированных” имен:

имя_объекта.имя_поля

имя_объекта.имя_метода()

Например:

complex x1,x2;

x1.re = 1.24;

x1.im = 2.3;

x2.set(5.1,1.7);

x1.print();

Второй способ доступа использует указатель на объект

указатель_на_объект–>имя_компонента

Например:

complex *point = &x1; // или point = new complex;

point –>re = 1.24;

point –>im = 2.3;

point –>print();

Доступность компонентов класса

В рассмотренных ранее примерах классов компоненты классов являются общедоступными. В любом месте программы, где “видно” определение класса, можно получить доступ к компонентам объекта класса. Тем самым не выполняется основной принцип абстракции данных – инкапсуляция (сокрытие) данных внутри объекта. Для изменения видимости компонент в определении класса можно использовать спецификаторы доступа: public, private, protected.

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

имя_объекта.имя_члена_класса

ссылка_на_объект.имя_члена_класса

указатель_на_объект->имя_члена_класса

Собственные (private) компоненты локализованы в классе и не доступны извне. Они могут использоваться функциями – членами данного класса и функциями – «друзьями» того класса, в котором они описаны.

Защищенные (protected) компоненты доступны внутри класса и в классах-наследниках.

Конструктор

Недостатком рассмотренных ранее классов является отсутствие автоматической инициализации создаваемых объектов. Для каждого вновь создаваемого объекта необходимо было вызвать функцию типа set, либо явным образом присваивать значения данным объекта. Однако для инициализации объектов класса в его определение можно явно включить специальную компонентную функцию, называемую конструктором. Формат определения конструктора следующий:

имя_класса(список_форм_параметров){операторы_тела_конструктора}

Имя этой компонентной функции по правилам языка С++ должно совпадать с именем класса. Такая функция автоматически вызывается при определении или размещении в памяти с помощью оператора new каждого объекта класса.

Пример.

сomplex(double re1 = 0.0,double im1 = 0.0

{re = re1;

im = im1;}

Конструктор выделяет память для объекта и инициализирует данные − члены класса.

Конструктор имеет ряд особенностей:

- для конструктора не определяется тип возвращаемого значения; даже тип void не допустим;

- указатель на конструктор не может быть определен, и соответственно нельзя получить адрес конструктора;

- конструкторы не наследуются;

- конструкторы не могут быть описаны с ключевыми словами virtual, static, const, mutuable, valatile.

Конструктор всегда существует для любого класса, причем, если он не определен явно, он создается автоматически. По умолчанию создается конструктор без параметров и конструктор копирования. Если конструктор описан явно, то конструктор по умолчанию не создается. По умолчанию конструкторы создаются общедоступными (public).

Параметром конструктора не может быть его собственный класс, но может быть ссылка на него (T&). Без явного указания программиста конструктор всегда автоматически вызывается при определении (создании) объекта. В этом случае вызывается конструктор без параметров. Для явного вызова конструктора используются две формы:

имя_класса имя_объекта (фактические_параметры);

имя_класса (фактические_параметры);

Первая форма допускается только при не пустом списке фактических параметров. Она предусматривает вызов конструктора при определении нового объекта данного класса:

complex ss (5.9,0.15);

Вторая форма вызова приводит к созданию объекта без имени:

complex ss = complex (5.9,0.15);

Существуют два способа инициализации данных объекта с помощью конструктора. Ранее мы рассматривали первый способ, а именно, передача значений параметров в тело конструктора. Второй способ предусматривает применение списка инициализаторов данного класса. Этот список помещается между списком параметров и телом конструктора. Каждый инициализатор списка относится к конкретному компоненту и имеет вид:

имя_данного_компонента (выражение)

По умолчанию создается также конструктор копирования вида

T::T(const T&),

где Т – имя класса.

Конструктор копирования вызывается всякий раз, когда выполняется копирование объектов, принадлежащих классу. В частности, он вызывается:

- когда объект передается функции по значению;

- при построении временного объекта как возвращаемого значения функции;

- при использовании объекта для инициализации другого объекта.

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

Можно создавать массив объектов, однако при этом соответствующий класс должен иметь конструктор по умолчанию (без параметров).

Массив объектов может инициализироваться либо автоматически конструктором по умолчанию, либо явным присваиванием значений каждому элементу массива.

class demo{

int x;

public:

demo(){x=0;}

demo(int i){x=i;}

};

void main(){

class demo a[20]; //вызов конструктора без параметров(по умолчанию)

class demo b[2]={demo(10),demo(100)};//явное присваивание

Деструктор

Динамическое выделение памяти для объекта создает необходимость освобождения этой памяти при уничтожении объекта. Например, если объект формируется как локальный внутри блока, то целесообразно, чтобы при выходе из блока, когда уже объект перестает существовать, выделенная для него память была возвращена. Желательно, чтобы освобождение памяти происходило автоматически. Такую возможность обеспечивает специальный компонент класса – деструктор класса. Его формат:

~имя_класса(){операторы_тела_деструктора}

Имя деструктора совпадает с именем его класса, но предваряется символом “~” (тильда).

Деструктор не имеет параметров и возвращаемого значения. Вызов деструктора выполняется не явно (автоматически), как только объект класса уничтожается.

Например, при выходе за область определения или при вызове оператора delete для указателя на объект.

string *p=new string (“строка”);

delete p;

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

Так же, как и для конструктора, не может быть определен указатель на деструктор.

1.2. Практическое задание

1) Определить пользовательский класс в соответствии с вариантом задания, место под массивы выделять в динамической памяти.

2) Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.

3) Определить в классе деструктор.

4) Определить в классе методы для просмотра и установки полей данных.

5) Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения (какой объект какой конструктор или деструктор вызвал).

6) Показать в программе использование указателя на объект.

Варианты заданий

Вариант

Задание

1

Класс – студент; поля: фамилия, курс, пол

2

Класс – служащий; поля: имя, возраст, рабочий стаж

3

Класс – кадры; поля: имя, номер цеха, разряд

4

Класс – изделие; поля: имя, шифр (строка), количество

5

Класс – библиотека; поля: название, автор, стоимость

6

Класс – экзамен; поля: название, дата, оценка

7

Класс – адрес; поля: город, улица, номер дома

8

Класс – товар; поля: название, количество, стоимость

9

Класс – корабль; поля: название, водоизмещение, тип (строка)

10

Класс – цех; поля: название, фамилия начальника, количество работающих

11

Класс – персона; поля: фамилия, возраст, пол

12

Класс – автомобиль; поля: марка, мощность, стоимость

13

Класс – страна; поля: название, форма правления, площадь

14

Класс – животное; поля: название, класс, средний вес

15

Класс – преподаватель; поля: фамилия, название предмета, рабочий стаж

16

Класс – самолет; поля: название, скорость, тип (строка)

17

Класс – город; поля: название, население, площадь

18

Класс – рыба; поля: название, место обитания (строка), средний вес

19

Класс – игра; поля: название, максимальное количество, тип (строка)

20

Класс – станция метро; поля: название, год основания, количество эскалаторов

21

Класс – магазин; поля: название, название торгового центра, этаж

22

Класс – растение; поля: названия, месяц цветения, средняя высота стебля

23

Класс – отдел; поля: название, фамилия руководителя, количество работающих

24

Класс – тест; поля: название, количество баллов, оценка

25

Класс – фильм; поля: название фильма, фамилия автора, стоимость

1.3. Контрольные вопросы

  1. Что значит в ООП понятие «класс», и какой формат его объявления в программе?
  2. Что такое объект класса, что он содержит?
  3. Какие существуют уровни доступа к объектам и методам класса? (Дать характеристику каждому).
  4. Что такое «конструктор», формат объявления, его особенности?
  5. Формат объявления деструктора, его назначение.




2. Лабораторная работа № 2 «Перегрузка операций и операторов в С++ »

Цель работы: получить практические навыки перегрузки операций в языке С++.

2.1. Краткие теоретические сведения

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

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

Формат операции-функции:

тип_возвр_значения operator знак_операции(специф_параметров)

{операторы_тела_функции}

Перегрузка унарных операций

Любая унарная операция может быть определена двумя способами: либо как компонентная функция без параметров, либо как глобальная (возможно дружественная) функция с одним параметром. В первом случае выражение Z означает вызов Z.operator (), во втором – вызов operator (Z).

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

Унарные операции, перегружаемые вне области класса (как глобальные функции), должны иметь один параметр типа класса. Передаваемый через этот параметр объект воспринимается как операнд.

Синтаксис:

а) в первом случае (описание в области класса):

тип_возвр_значения operator знак_операции

б) во втором случае (описание вне области класса):

тип_возвр_значения operator знак_операции(идентификатор_типа)

Перегрузка бинарных операций

Любая бинарная операция может быть определена двумя способами: либо как компонентная функция с одним параметром, либо как глобальная (возможно дружественная) функция с двумя параметрами. В первом случае xy означает вызов x.operator(y), во втором – вызов operator (x,y).

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

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

Перегрузка операции присваивания

Операция отличается тремя особенностями:

- операция не наследуется;

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

- операция может перегружаться только в области определения класса. Это гарантирует, что первым операндом всегда будет леводопустимое выражение.

Формат перегруженной операции присваивания:

имя_класса& operator=( имя_класса&);

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

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

2.2. Практическое задание

1) Определить пользовательский класс в соответствии с вариантом задания, место под массивы выделять в динамической памяти.

2) Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.

3) Определить в классе деструктор.

4) Определить в классе методы для просмотра и установки полей данных.

5) Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения (какой объект какой конструктор или деструктор вызвал).

6) Показать в программе использование указателя на объект.

Примечание: В случае одномерных массивов вещественных чисел при необходимости достраивать массивы до одной длины, заполняя новые ячейки единицами. В случае деления на ноль, заменять ноль на 0.00001.

Варианты заданий

Вариант

Задание

1

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

– – перевертывание строки (запись символов в обратном порядке);

++ нахождение наименьшего слова в строке и вывод его на экран

2

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

++ преобразование символов строки в прописные (заглавные) символы;

– – нахождение самого длинного слова в строке и вывод его на экран

3

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

+ конкатенация двух строк;

++ преобразование символов строки в строчные (маленькие) символы.

4

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

– удаление одной строки из другой (если одна строка является подстрокой другой);

– – преобразование символов строки в строчные (маленькие) символы.

5

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

Определить операции над массивами:

+ сложение элементов массива (a[i]+b[i] для всех i);

++ сортировать элементы массива по возрастанию.

6

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

Определить операции над массивами:

− вычитание элементов массива (a[i]-b[i] для всех i);

– – сортировать элементы массива по убыванию.

7

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

Определить операции над массивами:

* умножение элементов массива (a[i]*b[i] для всех i);

== проверка на равенство суммы элементов двух массивов.

8

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

Определить операции над массивами:

= присвоить всем элементам массива значение;

!= проверка на неравенство (поэлементное).

9

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

Определить операции над массивами:

int() размер массива;

− вычесть из каждого элемента массива число.

10

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

Определить операции над массивами:

/ деление элементов массива (a[i]/b[i] для всех i);

* умножить каждый элемент массива на число.

11

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

– – перевертывание строки (запись символов в обратном порядке);

++ нахождение наибольшего слова в строке и вывод его на экран

12

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

++ преобразование символов строки в прописные (заглавные) символы;

– – нахождение самого короткого слова в строке и вывод его на экран

13

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

– – перевертывание строки (запись символов в обратном порядке);

++ преобразование символов строки в строчные (маленькие) символы.

14

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

– удаление одной строки из другой (если одна строка является подстрокой другой);

– – преобразование символов строки в заглавные (большие) символы.

15

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

Определить операции над массивами:

+ сложение элементов массива (a[i]+b[i] для всех i);

++ сортировать элементы массива по убыванию.

16

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

Определить операции над массивами:

− вычитание элементов массива (a[i]-b[i] для всех i);

– – сортировать элементы массива по возрастанию.

17

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

Определить операции над массивами:

* умножение элементов массива (a[i]*b[i] для всех i);

== проверка на равенство разности элементов двух массивов.

18

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

Определить операции над массивами:

= присвоить всем элементам массива значение;

== проверка на равенство (поэлементное).

19

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

Определить операции над массивами:

int() размер массива;

* умножить каждый элемент массива на число.

20

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

Определить операции над массивами:

/ деление элементов массива (a[i]/b[i] для всех i);

− вычесть из каждого элемента массива число.

21

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

+ конкатенация двух строк;

++ преобразование символов строки в заглавные (большие) символы.

22

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки).

Определить операции над строками:

– – перевертывание строки (запись символов в обратном порядке);

– – преобразование символов строки в строчные (маленькие) символы.

23

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

Определить операции над массивами:

– вычитание элементов массива (a[i]-b[i] для всех i);

++ сортировать элементы массива по возрастанию.

24

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

Определить операции над массивами:

− вычитание элементов массива (a[i]-b[i] для всех i);

* умножить каждый элемент массива на число.

25

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

Определить операции над массивами:

* умножение элементов массива (a[i]*b[i] для всех i);

!= проверка на неравенство суммы элементов двух массивов.

2.3. Контрольные вопросы

  1. Как осуществляется перегрузка операций?
  2. Сколько аргументов требуется для определения перегруженной унарной (бинарной) операции?
  3. Чем отличается перегруженная операция ++ при ее использовании в префиксной форме от использования в постфиксной форме?




3. Лабораторная работа № 3 «Одиночное и множественное наследование в С++»

Цель работы: получить практические навыки создания иерархии классов в языке С++.

3.1. Краткие теоретические сведения

Наследование

Наследование − это механизм получения нового класса на основе уже существующего. Существующий класс может быть дополнен или изменен для создания нового класса.

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

Наследуемые компоненты не перемещаются в производный класс, а остаются в базовых классах.

В иерархии производный объект наследует разрешенные для наследования компоненты всех базовых объектов (public, protected).

Допускается множественное наследование – возможность для некоторого класса наследовать компоненты нескольких никак не связанных между собой базовых классов. В иерархии классов соглашение относительно доступности компонентов класса следующее:

- private – член класса может использоваться только функциями – членами данного класса и функциями – «друзьями» своего класса. В производном классе он недоступен.

- protected – то же, что и private, но дополнительно член класса с данным атрибутом доступа может использоваться функциями-членами и функциями – «друзьями» классов, производных от данного.

- public – член класса может использоваться любой функцией, которая является членом данного или производного класса, а также к public - членам возможен доступ извне через имя объекта.

Следует иметь в виду, что объявление friend не является атрибутом доступа и не наследуется.

Синтаксис определения производного класса:

class имя_класса : список_базовых_классов

{список_компонентов_класса};

Явно изменить умалчиваемый статус доступа при наследовании можно с помощью атрибутов доступа – private, protected и public, которые указываются непосредственно перед именами базовых классов.

Конструкторы и деструкторы производных классов

Поскольку конструкторы не наследуются, при создании производного класса наследуемые им данные-члены должны инициализироваться конструктором базового класса. Конструктор базового класса вызывается автоматически и выполняется до конструктора производного класса. Параметры конструктора базового класса указываются в определении конструктора производного класса. Таким образом происходит передача аргументов от конструктора производного класса конструктору базового класса. Пример:

class Basis

{

private:

int a,b;

public:

Basis(int x,int y){a=x;b=y;}

};

class Inherit:public Basis

{

private:

int sum;

public:


Характеристики книги

Учебное заведение
Программы
Просмотров
2
Скачиваний
0
Размер
341,91 Kb

Список файлов

Картинка-подпись
Ваше удовлетворение является нашим приоритетом, если вы удовлетворены нами, пожалуйста, оставьте нам 5 ЗВЕЗД и позитивных комментариев. Спасибо большое!

Комментарии

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