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
Б. Основное задание
Варианты основного задания
- Вектор в пятимерном евклидовом пространстве задается пятеркой своих координат. Реализовать:
a) сложение (вычитание) векторов;
b) скалярное произведение векторов;
c) векторное произведение векторов (операция % );
d) умножение вектора на скаляр.
Опишите класс и операции для работы с объектами этого класса. Продемонстрируйте выполнение операций.
- Создать класс “вектор_целых_чисел”, определить для него операции:
a) ввод элементов вектора с консоли (оператор >>);
b) вывод элементов вектора на экран или в файл (оператор << );
c) доступ к заданному элементу (оператор [] );
Продемонстрируйте выполнение операций с объектами этого класса.
- Создать класс “вектор_целых_чисел”, определить для него операции:
a) сложение векторов с сохранением значения в одном из них (операция += );
b) сложение векторов с сохранением значения в новом векторе (операция + );
c) вычитание векторов с сохранением значения в одном из них (операция -= );
Продемонстрируйте выполнение операций с объектами этого класса.
- Создать класс “Строка символов”. Реализовать операции:
a) сравнение строк (операция = = );
b) удаления из строки указанного символа (операция - );
c) переворота строки (операция ~ ).
Кроме того членом класса сделать также функцию с именем strset ( ) для удаления из первой строки всех символов, встречающихся во второй строке.
Продемонстрируйте выполнение операций с объектами этого класса.
- Создать класс “Строка_Си”, определить для него операции:
a) слияния строк (операция + );
b) сравнение строк на равенство (операция = = );
c) удаления из строки подстроки (операция - );
d) удаления из строки всех символов, содержащихся в строке-делителе (операция / );
e) копирования строки
f) функцию at (char *substr, char *dest, int i ), возвращающую номер позиции i-того вхождения строки substr в строкуdest.
Продемонстрируйте выполнение операций с объектами этого класса.
- В британском формате дата задается как число/месяц/год. Реализовать с учетом високосных годов:
a) сложение даты и определенного пользователем количества дней;
b) вычитание из даты определенного пользователем количества дней;
c) вычитание числа дней, прошедших между двумя датами (оператор % ).
Опишите класс и операции для работы с объектами этого класса. Продемонстрируйте выполнение операций.
- Время задается в формате час.минута.секунда.. Реализовать следующие операции (учесть переход через 24ч ):
a) сложение времени и определенного пользователем количества секунд;
b) вычитание из времени указанного пользователем количества секунд;
c) вычитание из одного момента времени другого;
d) подсчет числа секунд, между двумя моментами времени, лежащими в пределах одних суток (оператор % ).
Опишите класс и операции для работы с объектами этого класса. Продемонстрируйте выполнение операций.
- Ввести класс для работы с прямоугольной матрицей. Реализовать операции:
a) сложение (вычитание) двух матриц (операции +, - );
b) умножение двух матриц (операции * );
c) функцию det ( ) вычисления определителя матрицы;
d) функцию ort ( ) проверки ортогональности строк матрицы;
e) функцию transp ( ) получения транспонированной матрицы.
Продемонстрируйте выполнение операций с объектами этого класса.
- Ввести класс для работы с прямоугольной матрицей. Реализовать операции:
a) ввод матрицы с консоли (оператор >>);
b) вывод матрицы на экран или в файл (оператор << ) ;
c) доступ к элементу (оператор [] []);
d) функцию revers ( ) получения обратной матрицы;
e) функцию self_value ( ) получения собственных значений матрицы;
f) функцию self_vector ( ) получения собственных значений матрицы.
Продемонстрируйте выполнение операций с объектами этого класса.
- Создать класс “система линейных уравнений”, определить для него операции:
a) решение системы методом Гаусса;
b) решение системы методом Крамера;
Продемонстрируйте выполнение операций с объектами этого класса.