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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
#1

Создание класса с перегрузкой операторов конструктор и деструктор - C++

17.05.2011, 15:37. Просмотров 2550. Ответов 14
Метки нет (Все метки)

Создать класс времени (Time) содержащий закрытую переменную-член хранящую целое значение времени интервала в секундах. Интерфейс класса образуют функции-члены для доступа и изменения значения времени: GetHour(),GetMinute(), GetSecond(),
SetHour(const int), SetMinute(const int), SetSecond(const int). Для вывода значения объекта в формате «чч:мм:СС» определить функцию show().
Добавить в созданный класс конструктор по умолчанию, конструктор с одним аргументом(время в секундах)конструктор копирования деструктор. Предусмотреть вывод на консоль отладочных сообщений о выполнений конструкторов и деструкторов.

Перегрузить для созданного класса следующие операторы:
Унарный минус-;
Составной оператор *=(правый операнд –целое число);
Бинарный оператор * (правый операнд-целое число);
Оператор присваивания =(правый операнд –объект класса времени).

Замечание: предусмотреть где это необходимо, проверку корректности аргументов функций.


Hh=T/3600
Mm=(T-hh*3600)/60);
Ss=T-hh*3600-mm*60

T-время заданное в секундах

Я вообще не понимаю что происходит в этом вопросе

Добавлено через 20 минут
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
#include <iostream>
 
 
using namespace std;
class Time
{
public:
    Time operator-(Time &);
    Time operator* (Time &);
    void Time_show (void);
private:
    int second;
    int minute;
    int hour;
 
};
 
void Time::Time_show(void)
{
    cout << hour << ":" << minute << ":" << second << endl;
}
 
 
 
Time Time:: operator -(Time &t)//Не уверен что правильно
{
        this->hour -= t.hour;
        this ->minute -= t.minute;
        return *this;
}
Time Time::operator *(Time &t)//Незнай...
{
    return t;
}
 
 
 
int main()
{
    int i;
    Time t(2500);
    t.Time_show();
 
 
 
    cin >> i;
}
Немогу вникнуть вообще в ошибку С2664 . Програму я пишу 3 дня а двинулся только до этого момента... Что натворил я тут даже сам я не понимаю... вроде логично но тем же времени поход тут все не правиильно

Добавлено через 20 минут
От ошибки смог избавиться вот таким методом... правильный ли он???
C++
1
Time (int parametr): second(parametr){cout << "constructo" << endl;}
если есть возможность обьяснити что он делает...

Добавлено через 12 минут
Задачу бы обьяснить на пальцах.... Может бы сам все зделал по мне тут сильно чет все запутанно..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2011, 15:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание класса с перегрузкой операторов конструктор и деструктор (C++):

Создание шаблона с перегрузкой стандартных операторов - C++
Здравствуйте уважаемые! Уже несколько часов подряд бьюсь над задачей вроде бы очень простой, но видимо что-то упускаю. Задача...

Создать файл для определения класса рациональных чисел с перегрузкой операторов - C++
Добрый день. Нужно создать файл для определения класса рациональных чисел с перегрузкой операторов. Ввиду своей криворукости имею множество...

Конструктор и деструктор анонимного класса - C++
Здравствуйте. Есть ли в С++ такая возможность? Очень нужна именно такая реализация класса, но если это невозможно, буду думать.

Конструктор (деструктор) у класса, не имеющего тип - C++
Можно ли объявить и определить конструктор у класса, который не имеет тип? То есть у меня в программе всего 1 экземпляр этого класса,...

Дописать конструктор и деструктор для класса - C++
Помогите пожалуйста написать конструктор копии и деструктор, а также вызвать их, чтобы деструктор выводил на экран &quot;работает&quot; #include...

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

14
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 16:53 #2
Цитата Сообщение от GooDLivE Посмотреть сообщение
Задачу бы обьяснить на пальцах.... Может бы сам все зделал по мне тут сильно чет все запутанно..
Условие написанно очень коряво, я понял так : в классе одна закрытая переменная - кол-во секунд (назовем ее sec). GetHour(),GetMinute(), GetSecond(),SetHour(const int), SetMinute(const int), SetSecond(const int) работают например так:
C++
1
2
3
GetHour(){
 return sec/3600;//где sec-это член класса
}
и т.д.
Ф-ция show() по тому же принципу:
C++
1
2
3
void show(){
     cout<<sec/3600<<":"<<(sec%3600)/60<<":"<<sec%60;
}
Цитата Сообщение от GooDLivE Посмотреть сообщение
Предусмотреть вывод на консоль отладочных сообщений о выполнений конструкторов и деструкторов.
Тупо в конструкторе и деструкторе добавить строки:
C++
1
cout<<"Осторожно, работает конструктор";//ну вобщем понятно)
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
17.05.2011, 17:03  [ТС] #3
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
#include <iostream>
 
 
using namespace std;
class Time
{
public:
    Time (int parametr): second(parametr){cout << "constructo" << endl;}
    Time operator-(Time &);
    Time operator*= (Time &);
    void Time_show (void);
    int GetHour(void);
    int GetMinute(void);
    int GetSecond(void);
    ~Time(){cout<<"Destructor";}
    
 
private:
    int second;
    int minute ;
    int hour;
 
};
 
int Time::GetHour(void)
{
 
    hour=second/3600;
 
    return hour;
}
int Time::GetMinute(void)
{
    minute=(second-hour*3600)/60;
    Time::minute=minute;
    return minute;
}
int Time::GetSecond(void)
{
    
    second=second-hour*3600-minute*60;
    return second;
}
void Time::Time_show(void)
{
    cout << Time::GetHour() << ":" ;
    cout << Time::GetMinute() << ":" ;
    cout << Time::GetSecond() << endl;
}
 
 
 
Time Time:: operator -(Time &t)
{
        this->hour -= t.hour;
        this ->minute -= t.minute;
        this ->second -=t.second;
        return *this;
}
Time Time::operator*= (Time &t)
{
    this->hour *= 1;
    this ->minute *= 2;
    this ->second *= 29;
    return *this;
}
 
 
 
int main()
{
    int i;
    Time t(2500);
    t.Time_show();
 
 
 
    cin >> i;
}
тип того?? ток незнай куда впихнуть и смысол в них не вижу SetHour(const int), SetMinute(const int), SetSecond(const int)

C++
1
2
int minute ;
    int hour;
надеюсь не будет считаться за ошибку если находиться в
C++
1
private:
в некоторых местах я зделал так
C++
1
2
 minute=(second-hour*3600)/60;
Time::minute=minute;
иногда почемуто не присваивает новое значение просто тупо игнорит и пропускает....


Прокоментируйте пожайлуста операторы правильно ли я их зделал если нет то как надо??
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 17:10 #4
Цитата Сообщение от GooDLivE Посмотреть сообщение
ток незнай куда впихнуть и смысол в них не вижу SetHour(const int), SetMinute(const int), SetSecond(const int)
Если решил сделать так:
C++
1
2
3
4
private:
        int second;
        int minute ;
        int hour;
то интуитивно понятно, что должны делать эти ф-ции.
Но в условии задания сказано:
Создать класс времени (Time) содержащий закрытую переменную-член хранящую целое значение времени интервала в секундах.
о чем я писал выше. Повторюсь - условие какое-то несуразное.
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
17.05.2011, 17:12  [ТС] #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
Если решил сделать так:
C++
1
2
3
4
private:
        int second;
        int minute ;
        int hour;
то интуитивно понятно, что должны делать эти ф-ции.
Но в условии задания сказано:

о чем я писал выше. Повторюсь - условие какое-то несуразное.
Услови такое преподователь дал я сам нехера понять не могу 3 суток тока в вопрос вникал... а мона уточнить как ты понимаешь SetHour(const int), SetMinute(const int), SetSecond(const int) что с ними надо делать мини пример если можно
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 17:19 #6
Цитата Сообщение от GooDLivE Посмотреть сообщение
как ты понимаешь
Условие написано так, что каждый его поймет в силу своего воображения
я понял так:
C++
1
2
3
4
//в классе есть переменная sec
SetHour(const int h){
   sec=h*3600;
}
очень по-дебильному получается, но как есть)
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
17.05.2011, 17:25 #7
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
86
/*
Создать класс времени (Time) содержащий закрытую переменную-член хранящую целое значение времени интервала в секундах.
Интерфейс класса образуют функции-члены для доступа и изменения значения времени: GetHour(),GetMinute(), GetSecond(),
SetHour(const int), SetMinute(const int), SetSecond(const int). Для вывода значения объекта в формате «чч:мм:СС» определить функцию show().
Добавить в созданный класс конструктор по умолчанию, конструктор с одним аргументом(время в секундах)конструктор копирования деструктор.
Предусмотреть вывод на консоль отладочных сообщений о выполнений конструкторов и деструкторов.
 
Перегрузить для созданного класса следующие операторы:
Унарный минус-;
Составной оператор *=(правый операнд –целое число);
Бинарный оператор * (правый операнд-целое число);
Оператор присваивания =(правый операнд –объект класса времени).
 
Замечание: предусмотреть где это необходимо, проверку корректности аргументов функций.
 
 
Hh=T/3600
Mm=(T-hh*3600)/60);
Ss=T-hh*3600-mm*60
 
T-время заданное в секундах
 
Я вообще не понимаю что происходит в этом вопросе
*/
#include <iostream>
 
using namespace std;
 
class Time
{
    int seconds;
public:
    Time(int Seconds):
      seconds(Seconds)
    {
        std::cout << "Выполнен конструктор с одним аргументом.\n";
    }
    Time(const Time& t):
      seconds(t.seconds)
    {
        std::cout << "Выполнен конструктор копирования.\n";
    }
    Time():
      seconds(0)
    {
        std::cout << "Выполнен конструктор по умолчанию.\n";
    }
    ~Time()
    {
        std::cout << "Выполнен деструктор.";
    }
    int GetHour()   { return seconds / 3600;         }
    int GetMinute() { return ( seconds % 3600 ) / 60;}
    int GetSecond() { return seconds % 60;           }
    void show()     { std::cout << GetHour() << ':' << GetMinute() << ':' << GetSecond(); }
    void SetSecond(int s){ seconds = seconds / 60 * 60 + s;                }
    void SetMinute(int m){ seconds = seconds - GetMinute() * 60 + m * 60;  }
    void SetHour  (int h){ seconds = seconds % 3600 + h * 3600;            }
    void operator *=(int a ) { seconds *= a;             } 
    Time operator - (      ) { return Time(-seconds);    }
    Time operator * (int a ) { return Time(seconds * a); }
    void operator = (Time t) { seconds = t.seconds;      }
};
 
 
int main()
{
    setlocale( LC_ALL, "Russian" );
 
    int i;
 
    cout << "Введите длинну временного отрезка в секундах: ";
    cin >> i;
 
    Time time(i);
 
    time.show();
    std::cout << std::endl;
 
    time.SetHour(5);
    time.SetMinute(2);
    time.SetSecond(44);
 
    time.show();
    std::cout << std::endl;
}
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 17:30 #8
C++
1
2
3
void SetSecond(int s){ seconds = seconds / 60 * 60 + s;                }
        void SetMinute(int m){ seconds = seconds - GetMinute() * 60 + m * 60;  }
        void SetHour  (int h){ seconds = seconds % 3600 + h * 3600;            }
а я понял так:
C++
1
2
3
void SetHour  (int h){ seconds = h * 3600;}   
void SetMinute(int m){ seconds+=m * 60; }
void SetSecond(int s){ seconds += s;  }

Не по теме:


GooDLivE, у вас предмет называется "Творчество" ?

0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
17.05.2011, 17:34 #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
а я понял так:
но ведь не Add а Set... у меня больше сомнений вызвала реализация операторов...
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
17.05.2011, 17:41  [ТС] #10
Ну че по счет творчества.....
Препадователь объясняет так..
Вы должны не только решать поставленные задачи.Но и творчески подходить к вопросу так что творчест можно сказать включено

Добавлено через 3 минуты
Цитата Сообщение от CEBEP Посмотреть сообщение
C++
1
setlocale
( LC_ALL, "Russian" );
Это зачем?? первый раз такое вижу...
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 17:43 #11
Это русский язык в виндовой консоли.
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
17.05.2011, 17:45 #12
это чтобы текст нормально выводился русский... если на вашем компиляторе без этого всё нормально то можно убрать
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
17.05.2011, 17:46  [ТС] #13
C++
1
2
3
4
5
6
        time.SetHour(5);
        time.SetMinute(2);
        time.SetSecond(44);
 
        time.show();
        std::cout << std::endl;
А это зачем если по задаче вроде бы как тока секунды вводить или у тебя это было проверка??
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 17:47 #14
но где-то же нужно использовать эти пресловутые функции))
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
17.05.2011, 18:12  [ТС] #15
C++
1
2
3
4
5
6
7
        int GetHour()   { return seconds / 3600;         }
        int GetMinute() { return ( seconds % 3600 ) / 60;}
        int GetSecond() { return seconds % 60;           }
        void show()     { std::cout << GetHour() << ':' << GetMinute() << ':' << GetSecond(); }
        void SetSecond(int s){ seconds = seconds / 60 * 60 + s;                }
        void SetMinute(int m){ seconds = seconds - GetMinute() * 60 + m * 60;  }
        void SetHour  (int h){ seconds = seconds % 3600 + h * 3600;            }
тогда можно зделать так чтобы отдельно не вызывать
типо get вычисляеться путем повызова set
0
17.05.2011, 18:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2011, 18:12
Привет! Вот еще темы с ответами:

Зачем нужны конструктор и деструктор класса? - C++
вот задание: Пользовательский класс Х должен содержать необходимые элементы-данные, которые создаются в динамической области памяти....

Класс "Матрица": конструктор, деструктор и перегрузка операторов - C++
Матрица – KMatrix Методы: конструкторы, деструктор; операции: , =, ==, !=,...

Нужно ли прописывать конструктор и деструктор для чисто виртуального абстрактного класса - C++
Всем привет! Порылся в интернете, но не смог найти конкретного ответа на свой вопрос. Возможно я просто не смог грамотно сформулировать...

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О - C++
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:


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

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

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