Здравствуйте,
есть базовый класс строка mystring
Код |
class mystring // Опишем базовый класс строки { protected: char *p; // Указатель на char - хранит адрес динамически выделенной памяти для размещения символов строки int length; // Значение типа int - хранит длину строки в байтах public: // Обязательные методы должны выполнять следующие действия: mystring(); // Конструтор без параметров mystring(const char *s); // Конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом) mystring(char c); // Конструктор, принимающий в качестве параметра символ (char) mystring(const mystring &str); // Конструктор копирования ~mystring(); // Деструктор int get_length(); // Получение длины строки void show(); // Временно. Для тестирования вывод строки на экран };
|
и производные от него классы Строка идентификатор и комплексное число
Код |
// Производный от строка класс строка идентификатор (_A-Za-z0-9) class identification: public mystring { public: // Обязательные методы: identification(); // Конструтор без параметров identification(const char *s); // Конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом) identification(char c); // Конструктор, принимающий в качестве параметра символ (char) identification(const identification &str); // Конструктор копирования ~identification(); // Деструктор int find_char(char c); // Поиск первого вхождения символа в строку identification operator+(identification id); // Переопределим сложение (+) - операция конкатенации строк identification operator=(identification id); // Переопределим присваивание (=) bool operator<(identification id); // Переопределим оператор < - проверка на меньше. Строка считается меньше другой, // если код символа первой строки в i-й позиции // (i изменяется от 0 до n-1, где n - длина более // короткой строки) меньше кода символа в той же позиции // кода символа в той же позиции во второй строке, // длины строк могут не совпадать. }; // Производный от строка класс комплексное число (+-0-9i) class complex: public mystring { public: complex(); // Конструтор без параметров complex(const char *s); // Конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом) complex(const complex &str); // Конструктор копирования ~complex(); // Деструктор complex operator+(complex com); // Переопределим сложение + - сумма чисел complex operator=(complex com); // Переопределим присваивание (=) };
|
Все методы для классов написал, но когда дошел до приведенных заданий заданий вообще не понимаю как это организовать
Написать тестовую программу, которая:
* динамически выделяет массив указателей на базовый класс (4-6 шт.);
* в режиме диалога заполняет этот массив указателями на производные классы,
при этом экземпляры производных классов создаются динамически с заданием
начальных значений;
* для созданных экземпляров производных классов выполняется
проверка всех разработанных методов (в соответствии с вариантом задания),
с выводом исходных данных и результатов на дисплей.
* для конструкторов копирования каждого класса предусмотреть
диагностическую печать количества его ввызовов в заданное место дисплея,
(рекомендуется использовать статические члены класса).
Режим диалога обеспечивается с помощью иерархического меню.
Не понятно даже как это в консоли реализовать, не то что с windows forms
Пожалуйста приведите фрагмент кода, если можно, спасибо
вот моя попытка первый и второй пункт реализовать
Код |
mystring **pointer; int NumberOfElements; cin >> NumberOfElements; pointer =new mystring*[NumberOfElements]; for(int i=0;i<NumberOfElements;i++) { *(pointer+i) = dynamic_cast<mystring*>(new identification, new complex); }
|
Но как задать номер элемента, его тип и начальное значение, я хз
Следующий день. Как задать это все через консоль я понял, вроде сделал для консоли все кроме этого пункта
Цитата |
* для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его ввызовов в заданное место дисплея, (рекомендуется использовать статические члены класса).
|
Код |
int n; cout << "Введите колличество элементов-указателей на базовый класс mystring"; cin >> n; mystring **p = new mystring*[n];
char str[100], type; for (int i = 0; i < n; i++) { cout << "Выберите производный клас: 'i' - строка идентификатор, 'c' - комплексное число"; cin >> type;
cout << "Введите начальное значение"; cin >> str;
if (type == 'i') { p[i] = new identification(str); } else if (type == 'c') { p[i] = new complex(str); } }
int a, b, c; cout << "Выберите операнды для действия"; cin >> a >> b >> c;
cout << "Введите тип операндов"; cin >> type; if (type == 'c') { (*(complex*)p[a]) = (*(complex*)p[b]) + (*(complex*)p[c]); (*(complex*)p[b]) = (*(complex*)p[c]); } else if (type == 'i') { (*(identification*)p[a]) = (*(identification*)p[b]) + (*(identification*)p[c]); (*(identification*)p[b]) = (*(identification*)p[c]); cout << ((*(identification*)p[b]) < (*(identification*)p[c])); cout << "Введите символ для поиска в строке"; cin >> str[0]; cout << ((identification*)p[a])->find_char(str[0]) << " " << ((identification*)p[b])->find_char(str[0]) << " " << ((identification*)p[c])->find_char(str[0]) << "\n"; } p[a]->show(); p[b]->show(); p[c]->show(); cout << p[a]->get_length() << " " << p[b]->get_length() << " " << p[c]->get_length();
|
ну теперь не понятно, как это объединить с оболочкой
Цитата |
Программа должна иметь меню и окна для отображения необходимой информации.
Предлагается следующая организация работы программы: Первоначально пункты меню "Тестирование" и "Начальные значения" запрещены. После ввода числа создаваемых объектов по пункту меню "Кол-во элементов" этот пункт запрещается и разрешается пункт "Начальные значения". При этом на экране появляется окно [1] с количеством пронумерованных строк в соот- ветствии со значением N, введенным ранее как число создаваемых объектов и окно [2] для последующего вывода в него информации об отработке соответ- ствующих конструкторов и деструкторов. Пункт меню "Тестирование" разрешается после ввода начальных значений хотя бы для одного объекта. Все сформированные в процессе создания объектов строки отображаются в окне [1] в соответствуюшей введенному номеру объекта строке с указанием типа созданного объекта. Если в процессе тестирования значение объекта изменяется, то новое значение также должно отобразиться в окне [1]. Пункт меню "Операнды" служит для ввода номеров операндов, над которыми будут производиться выбранные действия. Количество операндов может быть от одного до трех (в зависимости от выбранного для тестирования метода). Для операций "сложение", "вычитание","умножение","деление" обязательно использование трех операндов ( два - над которыми производится действие и один - куда будет помещен результат ). Инициализация (или изменение значения и типа) одного или нескольких объектов производного класса может производиться в любой момент времени после ввода количества создаваемых значений без изменения значений и типа других ранее проинициализированых объектов. Допускается отсутствие пункта меню "Операнды" - в этом случае запрос номеров операндов осуществляется сразу после выбора соответствующего метода для тестирования. Необходимо также предусмотреть вывод различной диагностической информации ( сообщения об ошибках, результат работы тестируемых методов не изменяющих значение тестируемого объекта и т.п. ) Поскольку методы базового класса должны быть доступны объектам производных классов, создаются и инициализируются только объекты производных классов.
Программа должна осуществлять полный контроль вводимой информации.
Более подробная информация о целях работы и составе разрабатываемого программного обеспечения изложена в выданном преподавателем варианте задания.
|
Это сообщение отредактировал(а) numberone - 10.6.2012, 14:03
Присоединённый файл ( Кол-во скачиваний: 8 )
1.jpg 83,22 Kb