Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 курс / Отчет по лаб.Работе.docx
Скачиваний:
0
Добавлен:
27.10.2026
Размер:
31 Кб
Скачать
☆

Приложения

Для решения задачи была создана иерархию классов и обязательные методы, описанные в условии:

int main() {

int numElements;

std::cout << "Enter the number of elements: ";

std::cin >> numElements;

std::cin.ignore();

STRING** stringArray = new STRING*[numElements]; // Создание динамического массива со ссылками на строки

for (int i = 0; i < numElements; i++) {

// Блок кода, где пользователю предлагается выбрать тип строки и ввести начальное значение

// После этого создается соответствующий экземпляр STRING и заносится в массив.

char choice;

std::cout << "Choose the type of string (S/String, I/Identifier, C/Complex): ";

std::cin >> choice;

std::cin.ignore();

if (std::toupper(choice) == 'S') {

std::cout << "Enter a string: ";

char temp[100];

std::cin.getline(temp, 100);

stringArray[i] = new STRING(temp);

}

else if (std::toupper(choice) == 'I') {

std::cout << "Enter an identifier: ";

char temp[100];

std::cin.getline(temp, 100);

stringArray[i] = new IDENTIFIER_STRING(temp);

}

else if (std::toupper(choice) == 'C') {

std::cout << "Enter a complex number: ";

char temp[100];

std::cin.getline(temp, 100);

stringArray[i] = new COMPLEX_NUMBER(temp);

}

else {

std::cout << "Invalid choice. Defaulting to String." << std::endl;

std::cout << "Enter a string: ";

char temp[100];

std::cin.getline(temp, 100);

stringArray[i] = new STRING(temp);

}

}

// Основной цикл программы, где пользователю предоставляются разные возможности для взаимодействия со строками

for (int i = 0; i < numElements; i++) {

delete stringArray[i]; // Удаление динамических данных

}

delete[] stringArray; // Очистка массива указателей

return 0;

}

Для каждого класса определяется конструктор по умолчанию, конструктор копирования, деструктор, а также обязательные методы:

operator[] - возвращает символ строки по заданному индексу

read - выводит на экран символ строки по заданному индексу

Класс IdentifierString содержит дополнительные методы:

toLowerCase() - переводит все символы строки (кроме цифр) в нижний регистр

operator> - проверяет, больше ли строка, чем другая строка

operator= - переопределение оператора присваивания

Класс Complex содержит дополнительные методы:

operator/ - выполняет деление двух комплексных чисел

operator== - проверяет на равенство два комплексных числа

operator= - переопределение оператора присваивания

Тестовая программа должна:

динамически выделять массив указателей на базовый класс;

запрашивать у пользователя число элементов в массиве с помощью подпункта "Число элементов" в меню "Инициализация";

запрашивать начальные значения для элементов массива указателей на базовый класс с помощью подпункта "Начальное значение" в меню "Инициализация". Значения можно задавать несколько раз;

выполнять проверку всех разработанных методов для созданных экземпляров производных классов с помощью пункта меню "Тестирование";

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

Реализации функции main():

#include <iostream>

#include <cstring>

#include <cctype>

// Объявление класса STRING, который обрабатывает базовые операции над строками

class STRING {

protected:

char* str; // строка