Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 77, средняя оценка - 4.68
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
#1

класс дата - C++

22.08.2011, 12:41. Просмотров 10996. Ответов 24
Метки нет (Все метки)

Создать класс типа - дата с полями: день (1-31), месяц (1-12), год(целое число).Класс имеет конструктор:с параметрами, без параметров,копирования; деструктор; функции-члены получения дня,месяца и года,а также две функции-члены печати по шаблону: "5 января 1997 года" и "05.01.1997"; функции-члены должны проверять корректность задаваемых параметров.
Помогите пожалуйста с определением класса! Вот что у меня:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class date
{
    int day,month,year;
public:
    date();   //конструктор без параметров
    date(int=0,int=0,int=0);   //конструктор с параметрами
    date(const date&);   //конструктор копирования
    ~date();   //деструктор
    void set(int,int,int);   //получение
    void get(int*,int*,int*);   //установка
    void print();   //копирование???
}
Помогите доработать!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2011, 12:41     класс дата
Посмотрите здесь:

Дата класс - C++
Перешарила интернет. Помогите описать Класс даты,чтобы работало+вычисляла новые даты путем слож/вычит

Описать класс Дата - C++
Описать класс «Дата» - день, месяц (в виде числа), год. Предусмотреть возможность задания месяца в виде строки, возможность вывода даты на...

Создать класс Дата - C++
Нужно создать класс date, задать день, месяц и год, создать конструктор. Перегрузить операторы вычитания двух дат (-), сравнение дат и. В...

Создать класс Дата - C++
Добрый день:) Ребята помогите пожалуйста исправить ошибки. Задание звучит так: "Оглашается класс для роботы с датой в формате: день, год...

Разработать класс Дата - C++
Разработать программу для работы с датами, используя понятие класса. По введенной дате определите время года, номер квартала, номер...

Класс Триада, Дата и Время - C++
Всем привет. Я в программировании новичок :) пожалуйста, помогите написать программу. Создать класс Triad (тройка) с виртуальными...

ООП. Определить класс Дата - C++
Определить класс Дата (Date), в котором производится ввод календарной даты, определение соответствующего дате дня недели, прибавление к...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
22.08.2011, 13:39     класс дата #2
Цитата Сообщение от Nadinka______ Посмотреть сообщение
Помогите доработать!!!
Возможно имелось ввиду - разработать ?

Вот, может помочь)
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
22.08.2011, 13:44  [ТС]     класс дата #3
Спасибо конечно,но ничем не помогло
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
22.08.2011, 14:07     класс дата #4
Цитата Сообщение от Nadinka______ Посмотреть сообщение
Класс имеет конструктор:с параметрами, без параметров,копирования; деструктор; функции-члены получения дня,месяца и года,а также две функции-члены печати по шаблону: "5 января 1997 года" и "05.01.1997";
Из всего этого там есть конструктор с параметрами и вывод даты в формате "5 января 1997".
Цитата Сообщение от Nadinka______ Посмотреть сообщение
функции-члены должны проверять корректность задаваемых параметров.
Для того, чтобы это реализовать, нужно проверить - является ли введеный год високосным, а эта ф-ция там (по ссылке) тоже есть. Думаю стоит внимательно посмотреть на то, что советуют + попробовать что-то сделать самостоятельно. Твоя задача гораздо проще, чем та, что по ссылке
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
22.08.2011, 15:59  [ТС]     класс дата #5
пробую,спасибо за все))
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
23.08.2011, 10:52     класс дата #6
Я начал, попробуйте доделать. Если возникнут трудности, постите свой проблемный код и описывайте проблемы. Но обязательно с Вашей стороны должен быть код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <string>
 
class Date {
public:
    Date(int d = 0, int m = 0, int y = 0) {
        setDate(d, m, y);
    }
 
    Date(const Date &date) {
        setDate(date.day, date.month, date.year);
    }
 
    int getDay() const {
        return day;
    }
 
    int getMonth() const {
        return month;
    }
 
    int getYear() const {
        return year;
    }
 
        void setDay(int day) {
        this->day = day;
    }
 
    void setMonth(int month) {
        this->month = month;
    }
 
    void setYear(int year) {
        this->year = year;
    }
 
    void setDate(int day, int month, int year) {
        if (isValidDate(day, month, year)) {
            setDay(day);
            setMonth(month);
            setYear(year);
        }
        else {
            throw std::string("Not valid date");
        }
    }
 
    void print() const {
            std::cout << day << '/'
                      << month << '/'
                      << year << std::endl;
    }
 
    static bool isValidDate(int day, int month, int year) {
        // Здесь необходимо описать процедуру проверки даты на корректность
        return true;
    }
 
        static bool isLeapYear(int year) {
                // Здесь необходимо проверить является ли год високосным
                return false;
        }
 
        static int dayInMonth(int month) {
                // Здесь определить количество дней в месяце
                return 0;
        }
 
private:
    int day;
    int month;
    int year;
};
 
int main() {
    Date d1(5, 8, 1989);
    d1.print();
 
    Date d2 = d1;
    d2.setDay(6);
    d2.print();
 
    return 0;
}
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 15:26     класс дата #7
Столкнулся с этой же задачей, поясните пожалуйста данные куски кода:
C++
1
2
3
4
5
6
7
        Date(int d = 0, int m = 0, int y = 0) {
                setDate(d, m, y);
        }
 
        Date(const Date &date) {
                setDate(date.day, date.month, date.year);
        }
и
C++
1
2
3
else {
                        throw std::string("Not valid date");
                }
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
23.08.2011, 15:36     класс дата #8
TBIKC, в первом куске описаны два конструктора: с параметрами и копирования. Чтобы три раза не писать один и тот же код сделана функция setDate. Во втором куске бросается исключение в случае если дата не корректна.
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 15:52     класс дата #9
Из php знаю обработка исключений происходит так:
PHP
1
2
3
4
5
6
try {
    throw new Exception("Exception message");
    echo "That code will never been executed";
} catch (Exception $e) {
    echo $e->getMessage(); //выведет "Exception message"
}
Вот я и удивился почему только 1 слово throw написано, когда можно было просто вывести так
C++
1
cout << "Ошибка ... " << endl;
2 конструктора, первый то мне понятен, а вот 2 зачем нужен...
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
23.08.2011, 15:58     класс дата #10
Цитата Сообщение от fasked Посмотреть сообщение
C++
1
2
3
4
5
Date d1(5, 8, 1989);
* * * * d1.print();
Date d2 = d1;
* * * * d2.setDay(6);
* * * * d2.print()
Для d1 вызывается конструктор с параметрами, для d2 - конструктор копирования.
После выполнения на экран выведено будет две даты: 5/08/1989 и 6/08/1989. Обратите внимание, что у объекта d2 был вызван метод setDay. А первоначально значения скопированы из объекта d1.
Цитата Сообщение от TBIKC Посмотреть сообщение
почему только 1 слово throw написано, когда можно было просто вывести так
Если просто вывести, то ошибку можно заметить только на консоли (ну или куда stdout будет перенаправлен) - это плохо, так как присутствует зависимость от интерфейса представления данных. А что если данный класс будет использоваться с GUI? Исключение же можно поймать уровнем выше по иерархии вызовов.
В этом коде плохо то, что исключение может быть брошено из конструктора. Это действительно плохо.
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 16:01     класс дата #11
То есть без конструктора копирования Написать Date d2 = d1; было бы нельзя, и пришлось писать
Date d1(6, 8, 1989);
я прав ?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
23.08.2011, 16:04     класс дата #12
Цитата Сообщение от TBIKC Посмотреть сообщение
То есть без конструктора копирования Написать Date d2 = d1; было бы нельзя
В целом Вы правы, но стоит отметить один момент.
В данном случае конструктор копирования мог быть сгенерирован компилятором автоматически, такой конструктор просто скопировал бы побитово содержимое одного объекта в другой. Собственный конструктор копирования пишется для осуществления большего контроля над процессом создания объекта, например, проверка входных данных функцией isValidDate.
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 16:11     класс дата #13
Посмотрел и в основном же this, указатели,исключения ещё только буду проходить в следующих главах, а ведь пока только прошел
3. Введение в классы и объекты
4. Управляющие конструкции ( if else ) часть 1
Даже не знаю, хорошо ли это, что я вижу и копирую некоторые кусочки кода, но не совсем понимаю зачем они и что это )))
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
23.08.2011, 16:25     класс дата #14
Цитата Сообщение от TBIKC Посмотреть сообщение
Даже не знаю, хорошо ли это, что я вижу и копирую некоторые кусочки кода, но не совсем понимаю зачем они и что это
Разберетесь, все еще впереди
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2011, 00:55     класс дата
Еще ссылки по теме:

Реализовать класс Date (дата) - C++
в общем, утопающий студент просит о помощи, потому как сам уже себя не успеет спасти. нужно к понедельнику сдать 5 лабораторных на с++ ...

Класс «Дата». Сложение/вычитание дат - C++
Здравствуйте, нужна помощь - подсказка. Вот задание: Описать класс «Дата» – день, месяц (число), год. Предусмотреть возможность задания...

На базе класса “дата” создать класс “сообщение” - C++
Подскажите, что изменить, что б в визуале заработал вот задание &quot;&quot;На базе класса “дата” создать класс “сообщение”. Данные: число,...

Класс «Дата» - поля данных и перегруженные операции - C++
Привет! ребят помогите с заданием:&quot; Класс «Дата» должен включать поля данных: день, месяц, год; методы: вывод даты и времени года и...

Класс Дата-Время. Создать наследников класса: - C++
Приветствую вас уважаемое сообщество. Я только начал изучать наследование. В теории знаю, что такое наследование, как оно работает, про...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
24.08.2011, 00:55     класс дата #15
Конструктор копирования по-моему здесь всё-таки не нужен потому, что коль скоро удалось создать копируемый объект, значит данные в нём корректные, иначе было бы брошено исключение. А вот чем плохо вызывать исключения в конструкторе и как по-другому бороться с некорректными параметрами при создании объекта - было бы интересно узнать...
Yandex
Объявления
24.08.2011, 00:55     класс дата
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru