Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
KsEnHH
0 / 0 / 0
Регистрация: 08.04.2018
Сообщений: 25
1

Реализация трех конструкторов и деструктура для класса Date

29.06.2018, 22:34. Просмотров 858. Ответов 17
Метки нет (Все метки)


Разработайте класс DATE, в котором хранится информация о дате (число, месяц и год). В классе должны быть реализованы три конструктора и деструктор, а также метод, позволяющий присваивать значения, вводимые с клавиатуры, полям класса и метод, который выводит эти значения на экран в виде: 05.01.2015г.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2018, 22:34
Ответы с готовыми решениями:

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

Перегрузка оператора + для класса Date
Здравствуйте! Как правильно перегрузить оператор +(Date, int) для класса Date,...

Реализация конструкторов и деструктора
Дорогие форумчане! В своем обучение дошел до создания класса. В этом примере...

Инициализация конструкторов производного класса
Есть два класса class A { int x,y; A(int a, int b): x(a), y(b) { ...

Очерёдность вызова конструкторов класса
У меня есть 2 класса, к примеру Base и Mod. Mod является наследником Base....

17
Spardoks
0 / 0 / 1
Регистрация: 29.06.2018
Сообщений: 4
30.06.2018, 05:11 2
Лучший ответ Сообщение было отмечено KsEnHH как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//DATE.hpp
 
#ifndef DATE_HPP
#define DATE_HPP
 
class DATE {
  unsigned short day_;
  unsigned short month_;
  unsigned short year_; //0..65535
 
 public:
 
  DATE();
  DATE(unsigned short day, unsigned short month, unsigned short year);
  DATE(DATE const & other);
  ~DATE();
  void print();
  void set();
};
 
#endif
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
//DATE.cpp
 
#include "DATE.hpp"
#include <iostream>
 
DATE::DATE()
        :day_{0}, month_{0}, year_{0} {}
 
DATE::DATE(unsigned short day, unsigned short month, unsigned short year)
        : day_{day}, month_{month}, year_{year} {}
 
DATE::DATE(DATE const & other)
        : day_{other.day_}, month_{other.month_}, year_{other.year_} {}
 
void DATE::print() {
  std::cout << day_ << "." << month_ << "." << year_ << std::endl;
}
 
void DATE::set() {
  std::cout << "\nSetting_DATE:\n";
  std::cout << "day: ";
  std::cin >> day_;
  std::cout << "month: ";
  std::cin >> month_;
  std::cout << "year: ";
  std::cin >> year_;
}
 
DATE::~DATE() {}
0
k0vpack
71 / 69 / 32
Регистрация: 13.02.2018
Сообщений: 979
Завершенные тесты: 1
30.06.2018, 10:46 3
Spardoks, у меня возник вопрос
Цитата Сообщение от Spardoks Посмотреть сообщение
C++
1
2
3
unsigned short day_;
unsigned short month_;
unsigned short year_; //0..65535
а смысл писать знак "_" после? Его обычно в начале пишут что бы слово которое нужно находилось сверху
0
Peoples
1352 / 841 / 749
Регистрация: 06.02.2016
Сообщений: 2,243
Записей в блоге: 18
Завершенные тесты: 4
30.06.2018, 11:20 4
k0vpack, Чтобы не было конфликта имён между членом класса, например, day_ и аргументом конструктора day. Проще говоря отличались чтобы они
0
Spardoks
0 / 0 / 1
Регистрация: 29.06.2018
Сообщений: 4
01.07.2018, 15:03 5
Тут кому как удобнее.

Цитата Сообщение от k0vpack Посмотреть сообщение
находилось сверху
А сверху чего?
0
k0vpack
71 / 69 / 32
Регистрация: 13.02.2018
Сообщений: 979
Завершенные тесты: 1
01.07.2018, 15:40 6
Spardoks, когда в IDEшках пишеш к примеру названия уже определенной переменной то выскакивает список которой подбирает похожие слова
0
KsEnHH
0 / 0 / 0
Регистрация: 08.04.2018
Сообщений: 25
03.07.2018, 21:33  [ТС] 7
Почему функция main отсутствует? Без этой функции программа ругает.
0
k0vpack
71 / 69 / 32
Регистрация: 13.02.2018
Сообщений: 979
Завершенные тесты: 1
03.07.2018, 21:37 8
KsEnHH, я вижу ты слишком далёк от С++, ты хоть на пары то ходил?
0
KsEnHH
0 / 0 / 0
Регистрация: 08.04.2018
Сообщений: 25
03.07.2018, 21:40  [ТС] 9
Мы не изучали эту тему углублено, да и я с C++ не хорошо дружу.
0
k0vpack
71 / 69 / 32
Регистрация: 13.02.2018
Сообщений: 979
Завершенные тесты: 1
03.07.2018, 21:45 10
KsEnHH,
Цитата Сообщение от KsEnHH Посмотреть сообщение
углублено
углубленно? Типо ООП? Типо библиотек?
Открыв любой учебник, и первое слово в нем будет, что без main ничего вообще работать не будет, то есть начало программы в main'ne, конец программы в main'ne, а все что в середине он о болтается по коду и библиотеках

Добавлено через 58 секунд
KsEnHH, это как идти в магазин лёжа на диване, как пить лить воду не имея дна, как смотреть телевизор в 1700 году
0
KsEnHH
0 / 0 / 0
Регистрация: 08.04.2018
Сообщений: 25
03.07.2018, 21:52  [ТС] 11
Вы мне написали код без main. Я это у вас спрашиваю. Я знаю что это такое.
0
Kuzia domovenok
2406 / 2124 / 512
Регистрация: 25.03.2012
Сообщений: 7,644
Записей в блоге: 1
03.07.2018, 21:58 12
KsEnHH, тебе намекают, что нужно быть совсем нубом в С++, чтобы не уметь самостоятельно писать функцию main для проверки одного простенького класса.
0
KsEnHH
0 / 0 / 0
Регистрация: 08.04.2018
Сообщений: 25
03.07.2018, 22:06  [ТС] 13
Ок. Извиняюсь, что я лишний вопрос поднял. Оставлю тут, вдруг кому-нибудь, тупому как я, понадобится.

C++
1
2
3
4
5
6
int main()
{
DATE date;
date.set();
date.print();
}
0
hoggy
Заблокирован
Эксперт С++
04.07.2018, 00:50 14
Цитата Сообщение от k0vpack Посмотреть сообщение
а смысл писать знак "_" после? Его обычно в начале пишут
в начале его пишут только балбесы.
грамотные любители подчеркиваний - всегда в конце.

потому что можно налететь на UB
1
sourcerer
Модератор
Эксперт CЭксперт С++
4868 / 2053 / 325
Регистрация: 20.02.2013
Сообщений: 5,554
Записей в блоге: 24
Завершенные тесты: 1
04.07.2018, 06:07 15
Цитата Сообщение от hoggy Посмотреть сообщение
потому что можно налететь на UB
hoggy, даже когда переменная - это data member в приватной секции класса?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4868 / 2053 / 325
Регистрация: 20.02.2013
Сообщений: 5,554
Записей в блоге: 24
Завершенные тесты: 1
04.07.2018, 06:19 16
hoggy, да, действительно, неприятная ситуация. Не UB, но уже нехорошо.

Вот что бывает, когда начинаешь имена переменных с подчёркиваний

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
// These macros are defined by all GNU compilers that use the C preprocessor: C, C++,
// Objective-C and Fortran.
 
// __VERSION__
 
// This macro expands to a string constant which describes the version of the compiler in use.
// You should not rely on its contents having any particular form, but it can be counted on to
// contain at least the release number.
 
#include <iostream>
 
class Test
{
    int __VERSION__;
 
public:
    Test()
        : __VERSION__(666)
    {}
 
    int get_version()
    {
        return __VERSION__;
    }
};
 
int main()
{
    Test t;
    std::cout << t.get_version();
}
Реализация трех конструкторов и деструктура для класса Date


Кто не в курсе, вот что делает данный макрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// These macros are defined by all GNU compilers that use the C preprocessor: C, C++,
// Objective-C and Fortran.
 
// __VERSION__
 
// This macro expands to a string constant which describes the version of the compiler in use.
// You should not rely on its contents having any particular form, but it can be counted on to
// contain at least the release number.
 
#include <iostream>
 
 
int main()
{
    std::cout << "My GCC version: " << __VERSION__ << "\n\n";
}
Реализация трех конструкторов и деструктура для класса Date

0
hoggy
Заблокирован
Эксперт С++
04.07.2018, 09:11 17
Цитата Сообщение от gru74ik Посмотреть сообщение
Не UB, но уже нехорошо.
любые идентификаторы,
которые начинаются с подчеркивания
и потом заглавная буковка - зарегистрированны для нужд языка
для любых кейсов использования.

здесь UB без вариантов.
1
sourcerer
Модератор
Эксперт CЭксперт С++
4868 / 2053 / 325
Регистрация: 20.02.2013
Сообщений: 5,554
Записей в блоге: 24
Завершенные тесты: 1
04.07.2018, 09:45 18
Цитата Сообщение от hoggy Посмотреть сообщение
здесь UB без вариантов.
hoggy, здесь да. Ты прав.

hoggy, а вообще, стандарт говорит, что
нельзя использовать имена начинающиеся с
• двойного подчёркивания (вне зависимости от области видимости)
• одинарного подчёркивания и заглавной буквы (вне зависимости от области видимости)
• подчёркивания (в глобальном скоупе)
Из стандарта 2011 года:
Цитата Сообщение от C++ STANDARD ISO IEC 14882-2011
17.6.4.3.2 Global names
Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore __ or begins with an underscore followed by an uppercase
letter (2.12) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.
Так что, если в приватной области класса объявлено поле навроде _day или _month, то по стандарту это не UB, потому что после подчёркивания идёт буква в нижнем регистре и область видимости не глобальная.
0
04.07.2018, 09:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2018, 09:45

Конструкция =delete в объявлении конструкторов класса
объясните пожалуйста что за конструкция такая &quot;=delete&quot; в примерах:...

Почему в C++ такая странная запись конструкторов класса?
День добрый. Меня сбивают с толку некоторые особенности C++. Почему в C++ такая...

Реализация конструктора копирования для класса
P.S плохо с русским Этот конструктор копирования сломал мне мозг И вот что...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

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