1.1. Формулировка задания Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы в обоих объектах поменять местами первое и последнее слова строки. Содержимое объектов (их строки) до и после обмена вывести на экран.
1.2. Диаграмма классов
1.3. Описание диаграммы классов Метод ExchangeWords() возвращает указатель на обработанную в соответствии с заданием строку. Для осуществления обмена местами слов сначала вызывается метод TrimString(), который отсекает пробелы и символы табуляции в начале и конце строки, затем метод CheckString() проверяет условия осуществления обмена местами слов: строка не пуста и содержит как минимум два слова, разделенных пробелом. Метод PrintSourceString() выводит на экран значение свойства str, в соответствии с заданием он реализован как friend. Класс, так же содержит конструктор копирования и перегруженный конструктор с параметром char *. 1.4. Блок-схема метода «ExchangeWords()»
// Класс для обмена позиции первого и последнего слова в строке. class WordsExchanging { public: // Конструкторы. WordsExchanging(); explicit WordsExchanging(const char * );
int main() { WordsExchanging * obj1; WordsExchanging * obj2;
cout << "-= The first object: =-\n\n"; obj1 = new WordsExchanging(); obj1->SetNewString(" Institute of Information Technology "); cout << "Source string: "; PrintSourceString(*obj1); cout << "\nString after processing: "; obj1->ExchangeWords();
cout << "\n\n-= The second object: =-\n\n"; obj2 = new WordsExchanging(); obj2->SetNewString(" String contains spaces and long "); cout << "Source string: "; PrintSourceString(*obj2); cout << "\nString after processing: "; obj2->ExchangeWords();
delete obj1; delete obj2;
return 0; }
1.6. Результат выполнения программы
1.7. Теоретическая часть Для выполнения задания был использован динамический массив символов и оперцации над ним: выделение/освобождение памяти, обработка строк стандартынми функциями библиотеки string.h, ввод/вывод библиоте-кой iostream. Использовался цикл while и оператор if. Использовался friend – метод. Задание 2
2.1. Формулировка задания Создать несколько объектов (например, a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса перегрузку операции -= (b-=a). Содержимое объектов (a,b, их строк), до и после выполнения операции, вывести на экран.
2.2. Диаграмма классов
2.3. Описание диаграммы классов Класс содержит свойство – str – указатель на char. Два конструктора, один из них параметризован, конструктор копирования, методы установки и вывода значения на экран. Метод «operator -=» возвращает исходную строку без вхождений второй, указанной после знача =.
2.4. Блок-схема метода «operator -= (const MyClass &)»
int main() { MyClass a("ababababab"); MyClass b("b");
a.PrintStr(); b.PrintStr(); a-=b; a.PrintStr();
return 0; }
2.6. Результат выполнения программы
2.7. Теоретическая часть Для решения задачи был использован динамический массив символов и оперцации над ним: выделение/освобождение памяти, обработка строк стандартынми функциями библиотеки string.h, ввод/выод библиотекой iostream. Использовался цикл while и оператор if.
Задание 3
3.1. Формулировка задания Создать иерархию классов представляющих простое наследование. Базовый класс – матрица (динамическая (int **mt или int* или int *mt[константа])). Производный класс – методы, работающие с данными базового класса. Реализовать в производном классе метод – нахождения столбца с максимальной суммой элементов и заменой его с первым столбцом местами.
3.2. Диаграмма классов
3.3. Описание диаграммы классов Базовый класс – «MatrixBase» содержит свойства и методы для работы с двумерным массивом элементов целого типа. В соответствии с заданием присутствуют методы «Get» и «Set» для доступа к закрытым членам класса. Класс «MatrixExt» – дочерний, содержит методы для выполнения задания: «MaxSummElementsCol» – находит столбец с максимальной суммой элементов, «SpawCols» – меняет местами столбцы, индексы которых переданы в параметры. Оба класса содержат конструкторы, конструкторы копирования, деструкторы.
int ** Get() const; void Set(const int**, int, int);
protected: int colsCount,rowsCount; int **a; int Random(int=1, int=100) const; };
#endif
MatrixBase.cpp #include "MatrixBase.h"
MatrixBase::MatrixBase(int rows, int cols, bool fillRand) { colsCount = cols; rowsCount = rows; a = new int * [rowsCount]; for(int i=0; i<colsCount; a[i++] = new int [colsCount]); if(fillRand) RandomFilling(); }
MatrixBase::MatrixBase(const MatrixBase & src) { rowsCount = src.rowsCount; colsCount = src.colsCount; a = new int * [rowsCount]; for(int i=0; i<colsCount; a[i++] = new int [colsCount]); for(int i=0; i<rowsCount; ++i) for(int j=0; j<colsCount; ++j) a[i][j] = src.a[i][j]; }
MatrixExt & MatrixExt::SpawCols(int col1, int col2) { if(col1>colsCount || col1 < 0 || col2>colsCount || col2 < 0) { cout << "Error! Column number out of range!" << endl; return *this; }
for(int i=0; i<rowsCount; ++i) { int t = a[i][col1]; a[i][col1] = a[i][col2]; a[i][col2] = t; } return *this; }
main.cpp #include "MatrixExt.h"
int main() { MatrixExt a(5,5); a.PrintMatrix(); a.SpawCols(a.MaxSummElementsCol(), 0).PrintMatrix(); return 0; } 3.6. Результат работы программы
3.7. Теоретическая часть Для решения задачи использовался двумерный динамический массив элементов целого типа и операции над ним: выделение/высвобождение памяти, заполнение, вывод на экран стандартной библиотекой iostream. Так же в приминено наследование.
Список использованных источников
1. Пол А. Объектно-ориентированное программирование на С++ – Изд-во Бином, Невский Диалект, 2001. – 464 с. 2. Буч Г. Объектно-ориентированное программирование с примерами применения ¬ Издательство: M.: Конкорд, раниц; 1992 г. – 519 с 3. Дж. Либерти C++. Энциклопедия пользователя, Издательство: ДиаСофт, 2001 г., – М. - Мысль, 1969. – 590 с.