Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Наследование


Автор: Seifer 9.4.2006, 17:39
Суть темы такая:

Описать базовый класс СТРОКА.
Обязательные поля класса:
 указатель на char — хранит адрес динамически выделенной памяти для размещения символов строки;
 значение типа int — хранит длину строки в байтах.
Обязательные методы должны выполнять следующие действия:
 конструктор без параметров;
 конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом);
 конструктор, принимающий в качестве параметра символ;
 конструктор копирования;
 получение длины строки;
 очистка строки (сделать строку пустой);
 деструктор.
Описать производный от СТРОКА класс ДЕСЯТИЧНАЯ_СТРОКА.
Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, ДЕСЯТИЧНАЯ_СТРОКА принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.
Обязательные методы:
 конструктор без параметров;
 конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом);
 конструктор копирования;
 деструктор;
 метод, определяющий, можно ли представить данное число в формате int;
Переопределить следующие операции:
 присваивание (=);
 вычитание (–) — арифметическая разность строк;
 операция > — проверка на больше (по значению);
 операция < — проверка на меньше (по значению);
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов.
Написать тестовую программу, которая:
 динамически выделяет массив указателей на базовый класс (4–6);
 в режиме диалога заполняет этот массив указателями на производные классы, при этом экземпляры производных классов создаются динамически с заданием начальных значений;
 для созданных экземпляров производных классов выполняет проверку всех разработанных методов с выводом исходных данных и результатов на дисплей.
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса).


Очень нужна помощь! От этого зависит моя судьба! Заранее благодарен.


Автор: BreakPointMAN 9.4.2006, 19:30
Для таких вещей существует http://forum.vingrad.ru/index.php?showforum=142.

Автор: Megamozg 9.4.2006, 19:30
Я знаю откуда ты взял задание, мож не пытаться я уже тут его постил, писали поможем, а потом забыли уже неделю ни ответа ни привета, вот сам теперь разбираюсь.
Привет с курсов.

Автор: Seifer 9.4.2006, 19:56
Давай его толкать в ЦП
Я тут уже накопал немножко. Привет тебе с курсов тоже. Ты кто и у кого? smile

Автор: MAKCim 9.4.2006, 19:58
Цитата

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

я думаю, все писать никто не будет, в чем конкретно трудность?

Автор: Seifer 9.4.2006, 20:12
собсно, трудности в следующих моментах:

Момент1
Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, ДЕСЯТИЧНАЯ_СТРОКА принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.

Момент2
Переопределить следующие операции:
 присваивание (=);
 вычитание (–) — арифметическая разность строк;
 операция > — проверка на больше (по значению);
 операция < — проверка на меньше (по значению);

И момент3
Написать тестовую программу, которая:
 динамически выделяет массив указателей на базовый класс (4–6);
 в режиме диалога заполняет этот массив указателями на производные классы, при этом экземпляры производных классов создаются динамически с заданием начальных значений;
 для созданных экземпляров производных классов выполняет проверку всех разработанных методов с выводом исходных данных и результатов на дисплей.



Создание и удаление строки с помощью кострукторов и деструкторов я в целом понимаю.
Интересует переопределение операций и запись условия в десятичной_строке. Динамическое выделение массива указателей и заполнение в режиме диалога просто не знаю.
Вот основные моменты.

Автор: _hunter 10.4.2006, 11:23
что-то мне кажется что приведенные моменты просто скопированны из задания.
поэтому их пропустим...
идем дальше

Цитата(Seifer @ 9.4.2006, 20:12 Найти цитируемый пост)
Интересует переопределение операций

что именно интересует? примеров перегрузки операторов что на форуме что в том же рихтере -- хоть засыпся
Цитата(Seifer @ 9.4.2006, 20:12 Найти цитируемый пост)
запись условия в десятичной_строке

тут непонятно. пиши подробнее
Цитата(Seifer @ 9.4.2006, 20:12 Найти цитируемый пост)
Динамическое выделение массива

опять же -- на форуме уже обсуждалось

Цитата(Seifer @ 9.4.2006, 20:12 Найти цитируемый пост)
заполнение в режиме диалога

а это просто -- в цикле проходиш по всем элементам массива и показываеш форму ( или запрос в косоль )

Автор: Megamozg 10.4.2006, 16:11
То что тебе не понятно и еще кое что не понятно и нам, но такое задание дели и все тут.
Более менее начинаю доганять как делать, но не пойму что должно быть в итоге, в чем суть программы и как написать последнюю часть задания для тестирования проги.

Автор: _hunter 10.4.2006, 16:58
ну так уточни у преподавателя.
и что непонятно с последней частью?

Автор: MAKCim 10.4.2006, 18:03
Цитата

Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, ДЕСЯТИЧНАЯ_СТРОКА принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.

Код

template<class Sy_> class DecimalString
    : public String<Sy_>
{
private:
    typedef String<Sy_> Base_;

    bool range(const Sy_& obj) const
        {return obj>='0' && obj<='9';}

    bool sym(const Sy_& obj) const
        {return obj=='+' || obj=='-';}

    bool check() const
    {
        typename Base_::const_iterator i=Base_::begin();
        bool mask=true;
        while (mask && i!=Base_::end())
        {
            mask=range(*i) || (i==Base_::begin() && sym(*i));
            i++;
        }
        return mask;    
    }
...
public:
    operator int() const
        {...}   //перевод в число
};
Цитата



Автор: Seifer 10.4.2006, 21:36
Всё таки в форуме рыться времени нету, поэтому прошу выложить динамическое выделение.

Автор: Megamozg 11.4.2006, 14:39
Немного написал непонятны моменты:
1.В программе используются объекты типа string или массив символов char.
2.Какова роль указателя на char.
3.конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом);
Что имеется ввиду Си-строка, как описать конец строки нулевым байтом в конструкторе.
4.Конструктор копирования.
Имеется ввиду копирование посимвольно char или как.

Помогите с этими моментами, остальное понял или пойму по ходу.

Автор: Fixin 11.4.2006, 15:08
Цитата(Megamozg @ 11.4.2006, 14:39 Найти цитируемый пост)
1.В программе используются объекты типа string или массив символов char.

Массив чаров,
Цитата(Megamozg @ 11.4.2006, 14:39 Найти цитируемый пост)
2.Какова роль указателя на char.

указывает на начало сишной строки (массива чаров).
Цитата(Megamozg @ 11.4.2006, 14:39 Найти цитируемый пост)
3.конструктор, принимающий в качестве параметра Си-строку

Код

char a[] = "la-la-la\0";
char *b = a;


Цитата(Megamozg @ 11.4.2006, 14:39 Найти цитируемый пост)
4.Конструктор копирования.

Это относится к теории классов C++. Прикол в создании класса-копии. Этого я не знаю... помочь не могу.

Автор: Megamozg 12.4.2006, 02:16
Спасибо, щас попробую дописать.

Автор: Megamozg 12.4.2006, 07:17
Так че-то получилось.
Помогите написать тестовую прогу, я написал, но че-то не так, у меня без массива указателей, а как с ним незнаю.
При вводе можно вводить наподобии +++---23 как от этого избавиться, чтобы только +12 или -12.
И как правильно работать со знаковыми числами, т.е. ввели -12 и 22 и вычитаем их, у меня получается бред.
И что значат последние два пункта:

-Для созданных экземпляров производных классов выполняет проверку всех разработанных методов с выводом исходных данных и результатов на дисплей.

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

Ну вообщем прога не на 100% но работает.
Пожалуйста помогите с этими вопросами до завтра.

Автор: Megamozg 12.4.2006, 08:58
И еще как проверить наличие свободной памяти для выделения строки.
И как запретить ввод букв, я сделал, но по кривому, у меня не получилось.

Автор: Megamozg 12.4.2006, 13:15
Прошу проверить и подправить прогу, завтра надо сдать.
Весь материал нашел на форуме, все собрал, надо чуть доделать.
Пожалуйста помогите.

Автор: Seifer 12.4.2006, 15:08
Megamozg, выложи код по-новой, архив битый.

Автор: Megamozg 12.4.2006, 19:37
Архив нормальный, токо проверил.
выкладываю еще, те вопросы не решил нужна помощь, смотрите постом выше.

Как проверить наличие динамически выделяемой памяти?

Автор: Seifer 12.4.2006, 21:54
Может проверять на каждом шаге и сравнивать результаты?

Автор: Megamozg 12.4.2006, 22:23
Вот вроде все поправил, все представления переделал, теперь все отлично.
Непонятна все та же последняя часть задания, ну не получается, я не понимаю.

Написать тестовую программу, которая:

 динамически выделяет массив указателей на базовый класс (4–6);
 в режиме диалога заполняет этот массив указателями на производные классы, при этом экземпляры производных классов создаются динамически с заданием начальных значений;
 для созданных экземпляров производных классов выполняет проверку всех разработанных методов с выводом исходных данных и результатов на дисплей.

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



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

Дописать надо чуть-чуть, но я не могу, а завтра сдавать, прошу срочно помочь, плиз.

Автор: Seifer 12.4.2006, 22:44
Да ты не волнуйся, завтра сдадим, зачет получишь. Зинчик всё равно будет смотреть не на работоспособность, а на идею. У мя так на паскале в прошлом году было - прога не работала из-за мелких знаков (;), препод посмотрела, я ей всё объяснил. Зачет.

Автор: Megamozg 13.4.2006, 07:28
Да блин самому жалко, что все подобрал и написал, а в самом конце запор.

Автор: Seifer 13.4.2006, 08:57
У неё процентов 85-90 завершенности - более чем достаточно

Автор: Megamozg 13.4.2006, 19:52
Все сам написал и сдал.
На тестовую прогу с массивом указателей препод забил, просто проверил работу конструкторов и функций.

Всем кто помогал спасибо, если надо могу выложить последний вариант.
Вопрос решен.

Автор: Seifer 14.4.2006, 13:30
Так, погоди, а кто у тебя препод и во сколько занятия начинаются?
А програмку с сорцами выложи, посмотрим

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)