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

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

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

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

17.05.2011, 15:37. Просмотров 2472. Ответов 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 минут
Задачу бы обьяснить на пальцах.... Может бы сам все зделал по мне тут сильно чет все запутанно..
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++
Ребята,нужна помощь в написании программы. Для класса задать конструктор(для выделения памяти,открытия файлов,задания начальных значений...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 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<<"Осторожно, работает конструктор";//ну вобщем понятно)
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 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) содержащий закрытую переменную-член хранящую целое значение времени интервала в секундах.
о чем я писал выше. Повторюсь - условие какое-то несуразное.
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 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, у вас предмет называется "Творчество" ?

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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
17.05.2011, 17:47 #14
но где-то же нужно использовать эти пресловутые функции))
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
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:


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.05.2011, 18:12
Ответ Создать тему
Опции темы

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