Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив указателей на производные классы, В режиме диалога заполнить этот массив 
:(
    Опции темы
numberone
Дата 9.6.2012, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2012

Репутация: нет
Всего: нет



Здравствуйте, 
есть базовый класс строка 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
PM MAIL   Вверх
Randajad
Дата 13.6.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Код

    mystring();    // Конструтор без параметров
    mystring(const char *s);    // Конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом)
    mystring(char c);        // Конструктор, принимающий в качестве параметра символ (char)


Какие высокоинтеллектуальные комментарии.
PM MAIL   Вверх
Леопольд
Дата 14.6.2012, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(Randajad @  13.6.2012,  17:01 Найти цитируемый пост)
Какие высокоинтеллектуальные комментарии. 
Вероятнее всего, комментарии написаны исполнителем для заказчика, что-бы тот мог преподу что-то пробурчать про код...


Это сообщение отредактировал(а) Леопольд - 14.6.2012, 07:46


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
numberone
Дата 17.6.2012, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.6.2012

Репутация: нет
Всего: нет



спасибо за помощь, переписал все на шарпе, там все намного проще оказалось
тему можно закрыть
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.