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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
17.05.2011, 15:37     Создание класса с перегрузкой операторов конструктор и деструктор #1
Создать класс времени (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 минут
Задачу бы обьяснить на пальцах.... Может бы сам все зделал по мне тут сильно чет все запутанно..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2011, 15:37     Создание класса с перегрузкой операторов конструктор и деструктор
Посмотрите здесь:

C++ Зачем нужны конструктор и деструктор класса?
C++ Создание шаблона с перегрузкой стандартных операторов
C++ При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О
Для класса задать конструктор и деструктор C++
Создать файл для определения класса рациональных чисел с перегрузкой операторов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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<<"Осторожно, работает конструктор";//ну вобщем понятно)
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;
иногда почемуто не присваивает новое значение просто тупо игнорит и пропускает....


Прокоментируйте пожайлуста операторы правильно ли я их зделал если нет то как надо??
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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) содержащий закрытую переменную-член хранящую целое значение времени интервала в секундах.
о чем я писал выше. Повторюсь - условие какое-то несуразное.
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) что с ними надо делать мини пример если можно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
17.05.2011, 17:19     Создание класса с перегрузкой операторов конструктор и деструктор #6
Цитата Сообщение от GooDLivE Посмотреть сообщение
как ты понимаешь
Условие написано так, что каждый его поймет в силу своего воображения
я понял так:
C++
1
2
3
4
//в классе есть переменная sec
SetHour(const int h){
   sec=h*3600;
}
очень по-дебильному получается, но как есть)
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
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;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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, у вас предмет называется "Творчество" ?

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

Добавлено через 3 минуты
Цитата Сообщение от CEBEP Посмотреть сообщение
C++
1
setlocale
( LC_ALL, "Russian" );
Это зачем?? первый раз такое вижу...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
17.05.2011, 17:43     Создание класса с перегрузкой операторов конструктор и деструктор #11
Это русский язык в виндовой консоли.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
17.05.2011, 17:45     Создание класса с перегрузкой операторов конструктор и деструктор #12
это чтобы текст нормально выводился русский... если на вашем компиляторе без этого всё нормально то можно убрать
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;
А это зачем если по задаче вроде бы как тока секунды вводить или у тебя это было проверка??
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
17.05.2011, 17:47     Создание класса с перегрузкой операторов конструктор и деструктор #14
но где-то же нужно использовать эти пресловутые функции))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2011, 18:12     Создание класса с перегрузкой операторов конструктор и деструктор
Еще ссылки по теме:

C++ Конструктор и деструктор анонимного класса
C++ Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
C++ Нужно ли прописывать конструктор и деструктор для чисто виртуального абстрактного класса

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

Или воспользуйтесь поиском по форуму:
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
Yandex
Объявления
17.05.2011, 18:12     Создание класса с перегрузкой операторов конструктор и деструктор
Ответ Создать тему
Опции темы

Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru