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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Написать класс для работы с датой 
:(
    Опции темы
Dodge
Дата 13.11.2006, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



1)Создать класс даты (Date) с объектом-членом "Число дней"  (переменная целого типа в закрытой области класса) и с функциями доступа к объекту-члену (GetYear(), GetMonth(), GetDay(), SetYear(int), SetMonth(int), SetDay(int), SetDate(int, int, int), GetLenDay(), SetLenDay()), функцией вывода объекта класса на экран в формате даты (Show()). Дял упрощения считать что в каждом году 360 дней, а в месяце 30 дней.
2) Добавить в созданный класс конструктор по умолчанию, конструктор с инициализацией, конструктор с тремя аргументами в формате даты. Во всех случаях выводить сообщение о создании объекта. Реализовать проверку корректности значений.
3) Добавить в созданный клас деструктор (выводить сообщение об уничтожении объекта)
4) осуществить перегрузку указанных операторов для объектов заданного класса: 
            а) перегрузить унарные арифмитические операторы: +, -, ++, -- ;
            б) перегрузить бинарные арифмитические операторы: +, -, *, / ;
            в) перегрузить логические операторы: ==, != ;
            г) перегрузить оператор присваивания: = ;
PM MAIL   Вверх
Kisa
Дата 15.11.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветик! 
Решила немного помочь smile  
Конструкторы можешь сделать такими:
Код

class date
{
int day, month, year;
static int number;//для подсчета созданных объектов класса
public:
static int getNumber ()
    {
        return number;
    }
date();//какой-нибудь по умолчанию
date(int d=1,int m=1,int y=1950);//с инициализацией начальных значений
~date();
};
int date::number=0;//для подсчета объектов
date()
{
cout<<"Sozdan objekt"<<endl;
number ++;
}
date(int d=1,int m=1,int y=1950)
{
day=d;
month=m;
year=y;
}
~date()
{
cout<<"Unichtogenie objecta"<<endl;
number --;
}
main()
{
date *d=new date;
}

Возможно есть ошибки, т.к. писала прям так. 

Модератор: правда красивее с подсветкой?

Это сообщение отредактировал(а) alexeis1 - 15.11.2006, 21:30
PM MAIL   Вверх
Dodge
Дата 16.11.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



в определении класса в public'е нужно создать только одну переменную - ЧИСЛО ДНЕЙ.
а для чего предназначена "static"? smile 
PM MAIL   Вверх
Oleg_Ci
Дата 18.11.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Насочинял... smile 
Код

#include <iostream>
#include <climits>
#include <cmath>
using std::cout;
using std::cin;

class Date{
private:
    int time;
public:
    Date( unsigned int day = 1, unsigned int month = 1, int year = 0 );
    ~Date();

    int GetYear()            { return time/360; }
    int GetMonth()        { return (int)fmod(double(time), 360) / 30  +1; }
    int GetDay()            { return (int)fmod(fmod(double(time), 360), 30)  +1; }
    int SetYear(int);
    int SetMonth(unsigned int);
    int SetDay(unsigned int);
    int SetDate(unsigned int day = 0, unsigned int month = 0, int year = 0)
                        { return time = year * 360 + (month -1) * 30 + day -1; }
    int GetLenDay()                { return time; }
    void SetLenDay(int _time)    { time = _time; }
    void Show() { printf("Year %d.  Month %d. Day %d.\n", GetYear(), GetMonth(), GetDay()); }

    Date & operator=( const Date & );
    Date & operator+=( const Date & );
    Date & operator-=( const Date & );
    Date operator+( const Date & ) const;
    Date operator-( const Date & ) const;
    Date operator*( const Date & ) const;
    Date operator/( const Date & ) const;
    Date & operator++();
    Date & operator--();
    bool operator==( const Date & ) const;
    bool operator!=( const Date & ) const;
};
//////////////////////////////////////
Date::Date( unsigned int day, unsigned int month, int year ){
    bool error = false;
    if( day > 30 || day == 0 ) error = true, day = 30;
    if( month > 12 || month == 0 ) error = true, month = 12;
    if( year > INT_MAX - 360 ) error = true, year = INT_MAX - 360;
    if( year < INT_MIN + 360 ) error = true, year = INT_MIN + 360;
    if( error ) cout << "Error: exceeding of possible number limits !!!\n"; // превышение допустимых числовых пределов !!!

    time = year * 360 + (month -1) * 30 + day -1;
    cout << "The new Date object is created.\n"; //"Новый объект Date создан."
}
Date::~Date(){
    cout << "Deleting of the Date object.\n"; // "Удаление объекта Date"
}
/////////////////////////////////
int Date::SetYear( int year ){
    if( year > INT_MAX - 360 ){
        cout << "Error: year > INT_MAX !!\n";
        year = INT_MAX - 360;
    }
    return time += (year - time/360) * 360;
}
int Date::SetMonth( unsigned int month ){
    if( month > 12 ){
        cout << "Error: month > 12 !!\n";
        month = 12;
    }
    else if( month == 0 ){
        cout << "Error: month = 0 !!\n";
        month = 1;
    }
    return time += (month -1 - GetMonth()) * 30;
}
int Date::SetDay( unsigned int day ){
    if( day > 30 ){
        cout << "Error: day > 30 !!!\n";
        day = 30;
    }
    if( day == 0 ){
        cout << "Error: day = 0 !!!\n";
        day = 1;
    }
    return time += day -1 - GetDay();
}
/////////////////////////////////////
Date & Date::operator=( const Date & d ){
    time = d.time;
    return * this;
}
Date Date::operator+( const Date & d ) const{
    Date dd(d);
    dd.time += d.time;
    return dd;
}
Date Date::operator-( const Date & d ) const{
    Date dd(d);
    dd.time -= d.time;
    return dd;
}
Date Date::operator*( const Date & d ) const{
    Date dd(d);
    dd.time *= d.time;
    return dd;
}
Date Date::operator/( const Date & d ) const{
    Date dd(d);
    dd.time /= d.time;
    return dd;
}
Date & Date::operator++(){
    time++;
    return *this;
}
Date & Date::operator--(){
    time--;
    return *this;
}
bool Date::operator==( const Date & d ) const{
    return time == d.time;
}
bool Date::operator!=( const Date & d ) const{
    return time != d.time;
}
Date & Date::operator+=( const Date & d ){
    time += d.time;
    return *this;
}
Date & Date::operator-=( const Date & d ){
    time -= d.time;
    return *this;
}
///////////////////////// MAIN ////////////////////////////
int main()
{
    // экспрерименты с датами...
    Date d( 30, 4 );
    d.Show();
    d.SetDate( 30, 12, 2234 );
    d.Show();
    Date d2;
    d2 = d;
    d2.Show();
    d2 += d;
    d2.Show();
    if( d2 != d ) cout << "Ok !!!\n";
    else cout << "Error !!!\n";
    Date d3( 50, 4, 2006 );
    d = d2 + d3;
    cout << "\n\n";
    d.Show();
    d2.Show();
    d3.Show();
    fflush(stdin);
    puts("\n\n\nPress the key of enter for the program exit");
    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
Dodge
Дата 19.11.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Олег, спасибо огромное!!! то что нужно!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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