samp ob (88) ; // инициализация объекта значением 88

Samp obarr [10] ; // неинициализируемый 10-элементный массив

// }

Задание 2.2(для всех)

Определите класс "строка" с двумя член-данными: char *p и int len,где char*p- указатель на строку, а int len - длина строки.

Для данного класса : определить:

· один конструктур и деструктор( предусмотреть выдачу сообщения об их работе);

· переопределить операцию "+" для сложения объектов класса;

· определить член функцию, выводящую строку на экран.

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

Указание: при написании программы использовать стандартные библиотечные функции strcpy()и strcat().

char * strcpy(char *sp, char *si) - копирует строку si в строку sp, включая '\0'; возвращает sp.

Char * strcat(char *sp,char *si) - приписывает строку si к строке sp; возвращает sp.

Примеры выполнения практических заданий

Постановка задачи 2.1

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

Структурная схема класса (представить в виде UML-диаграмм)

Член-данные   Класс mycl Член-функции
Целое число: x   Конструктор по умолчанию: mycl() Конструктор с инициализацией: mycl ( int n ) Вывод значения: getx()

 

Исходный текст программы

#include <iostream.h>

class mycl

{ int x;

public:

// перегрузка конструктора двумя способами

mycl ( ) { x = 0 ;} // нет инициализации

mycl ( int n ) { x = n ;} // инициализация

int getx ( ) { return x ; } };

int main ( )

{ mycl a1 ( 5 ) ; // объявление объекта а1 с начальным значением

mycl a2 ; // объявление объекта а2 без начального значения

cout << " значение a1: " << a1. getx ( ) << '\n' ;

cout << " значение a2: " << a2. getx ( ) << '\n' ;

return 0 ; }

Результаты выполнения программы

значение a1: 5

значение a2: 0

 

 

Постановка задачи 2.2

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

Ø собственно строка;

Ø длина строки.

Переопределим “ + “ так, чтобы можно было складывать (сцеплять) символьные строки.

Структурная схема класса (представить в виде UML-диаграмм)

Член-данные   Класс String Член-функции
Собственно строка: s Длина строки: len   Функция _ операция с спецификацией friend: operator + ()

 

Исходный текст программы

#include <stdio.h>

#include <string.h>

const LEN = 80 ;

class String {

public :

char s [LEN] ;

int len ;

friend String operator + (String S1, String S2);

} ;

String operator + (String S1, String S2)

{String TmpS ;

if ( (TmpS.len = S1.len + S2.len) >= LEN)

{ TmpS.s[0] = ‘\0’ ; TmpS.len = 0 ;}

else

{ strcpy (TmpS.s, S1.s) ; strcat (TmpS.s, S2.s) ; }

return TmpS ;

}

void main ( )

{ String S1, S2, S3 ;

strcpy (S1.s, “перегрузка операций - ”) ;

S1.len = strlen(S1.s) ;

strcpy (S2.s, “классная вещь !”) ;

S2.len = strlen(S2.s) ;

printf(“Были строки: \n %s \n %s \n с длинами %d и %d \n”, S1.s,S2.s, S1.len, S2.len) ;

S3 = S1 + S2 ; // генерируется код, по вызову: operator + (s1, s2) ;

printf(“Получилась строка: \n %s\n длиной %d \n”, S3.s, S3.len) ;

}

Результаты выполнения программы.

Были строки:

перегрузка операций –

Классная вещь !

С длинами 22 и 15

Получилась строка:

Перегрузка операций – классная вещь !

Длиной 37

Б. Основное задание

Варианты основного задания

  1. Вектор в пятимерном евклидовом пространстве задается пятеркой своих координат. Реализовать:

a) сложение (вычитание) векторов;

b) скалярное произведение векторов;

c) векторное произведение векторов (операция % );

d) умножение вектора на скаляр.

Опишите класс и операции для работы с объектами этого класса. Продемонстрируйте выполнение операций.

  1. Создать класс “вектор_целых_чисел”, определить для него операции:

a) ввод элементов вектора с консоли (оператор >>);

b) вывод элементов вектора на экран или в файл (оператор << );

c) доступ к заданному элементу (оператор [] );

Продемонстрируйте выполнение операций с объектами этого класса.

  1. Создать класс “вектор_целых_чисел”, определить для него операции:

a) сложение векторов с сохранением значения в одном из них (операция += );

b) сложение векторов с сохранением значения в новом векторе (операция + );

c) вычитание векторов с сохранением значения в одном из них (операция -= );

Продемонстрируйте выполнение операций с объектами этого класса.

  1. Создать класс “Строка символов”. Реализовать операции:

a) сравнение строк (операция = = );

b) удаления из строки указанного символа (операция - );

c) переворота строки (операция ~ ).

Кроме того членом класса сделать также функцию с именем strset ( ) для удаления из первой строки всех символов, встречающихся во второй строке.

Продемонстрируйте выполнение операций с объектами этого класса.

  1. Создать класс “Строка_Си”, определить для него операции:

a) слияния строк (операция + );

b) сравнение строк на равенство (операция = = );

c) удаления из строки подстроки (операция - );

d) удаления из строки всех символов, содержащихся в строке-делителе (операция / );

e) копирования строки

f) функцию at (char *substr, char *dest, int i ), возвращающую номер позиции i-того вхождения строки substr в строкуdest.

Продемонстрируйте выполнение операций с объектами этого класса.

  1. В британском формате дата задается как число/месяц/год. Реализовать с учетом високосных годов:

a) сложение даты и определенного пользователем количества дней;

b) вычитание из даты определенного пользователем количества дней;

c) вычитание числа дней, прошедших между двумя датами (оператор % ).

Опишите класс и операции для работы с объектами этого класса. Продемонстрируйте выполнение операций.

  1. Время задается в формате час.минута.секунда.. Реализовать следующие операции (учесть переход через 24ч ):

a) сложение времени и определенного пользователем количества секунд;

b) вычитание из времени указанного пользователем количества секунд;

c) вычитание из одного момента времени другого;

d) подсчет числа секунд, между двумя моментами времени, лежащими в пределах одних суток (оператор % ).

Опишите класс и операции для работы с объектами этого класса. Продемонстрируйте выполнение операций.

  1. Ввести класс для работы с прямоугольной матрицей. Реализовать операции:

a) сложение (вычитание) двух матриц (операции +, - );

b) умножение двух матриц (операции * );

c) функцию det ( ) вычисления определителя матрицы;

d) функцию ort ( ) проверки ортогональности строк матрицы;

e) функцию transp ( ) получения транспонированной матрицы.

Продемонстрируйте выполнение операций с объектами этого класса.

  1. Ввести класс для работы с прямоугольной матрицей. Реализовать операции:

a) ввод матрицы с консоли (оператор >>);

b) вывод матрицы на экран или в файл (оператор << ) ;

c) доступ к элементу (оператор [] []);

d) функцию revers ( ) получения обратной матрицы;

e) функцию self_value ( ) получения собственных значений матрицы;

f) функцию self_vector ( ) получения собственных значений матрицы.

Продемонстрируйте выполнение операций с объектами этого класса.

  1. Создать класс “система линейных уравнений”, определить для него операции:

a) решение системы методом Гаусса;

b) решение системы методом Крамера;

Продемонстрируйте выполнение операций с объектами этого класса.