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

Конструктор и деструктор - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
07.08.2013, 18:14     Конструктор и деструктор #1
Всем привет.Вообщем передо мной стоит такая задача-Отобразить на экране время работы программы, используя конструктор и деструктор.В конструкторе используем ф-ию clock а в диструкторе вывести когда отработала программа
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 18:14     Конструктор и деструктор
Посмотрите здесь:

C++ конструктор и деструктор
конструктор и деструктор в C++ C++
C++ конструктор и деструктор
C++ Конструктор и деструктор
Конструктор/деструктор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.08.2013, 20:14     Конструктор и деструктор #21
Цитата Сообщение от Anastasiya1 Посмотреть сообщение
Спасибо но все это не то!
Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
07.08.2013, 20:16     Конструктор и деструктор #22
Как Вы определили, что это не то?
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 20:27     Конструктор и деструктор #23
Цитата Сообщение от Nixy Посмотреть сообщение
Как Вы определили, что это не то?
женское чутьё
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6160 / 2889 / 282
Регистрация: 04.12.2011
Сообщений: 7,689
Записей в блоге: 3
07.08.2013, 20:34     Конструктор и деструктор #24
Может так:
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
#include <iostream>
#include <time.h>
using namespace std;
class b
{
public:
clock_t timeAppStart;
clock_t timeAppStop;
clock_t timeOfAction;
void action(){//функция пишет изнутри монитора на экран всё кроме приветствия, ввода времени и прощания)
clock_t timeAppWork=timeAppStart;
cout<<"Begins "<<endl;
while (timeAppWork<timeAppStop){
timeAppWork=clock();
}
cout<<endl<<"the time elapsed is "<<(double)(timeAppWork - timeAppStart)/CLOCKS_PER_SEC<<endl;
 
}
 
b(clock_t timeOfAction_)
:timeOfAction(timeOfAction_)
{
timeAppStart = clock();
timeAppStop = timeAppStart + timeOfAction;
action();
}
~b()
{
timeAppStop=clock();
cout<<endl<<"Stoped"<<endl;
}
};
void lauchit_now(clock_t  timetowork){
b act(timetowork*CLOCKS_PER_SEC);
}
int main()
{
clock_t towork;
cout<<"Hi, input the time to work in seconds ";
cin>>towork;
cout<<endl;
 lauchit_now(towork);
cout<<endl<<endl;
cout<<"By, and press eny key to exit, please";
 cin.ignore();
 cin.get();
  return 0;
}
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
07.08.2013, 20:59  [ТС]     Конструктор и деструктор #25
Да ладно забудьте, не понимаю я
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 21:14     Конструктор и деструктор #26
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
#include <iostream>
#include <time.h> // Подключаем библиотеку для работы с часами
 
class SomeClass // Создаем класс
{
public:
SomeClass() // конструктор класса SomeClass 
{ 
std::cout << "SomeClass constructor..\n"; // выводим сообщение о срабатывании конструктора
std::cout << "Program worked " << clock() << " ms.. \n"; // выводим из конструктора время, которое программа работает, в МС, функция clock() их библиотеки time.h как раз выводит это время
}
~SomeClass() // деструктор
{ 
std::cout << "SomeClass destructor..\n";  // выводим сообщение о срабатывании деструктора
std::cout << "Program close " << __TIME__ << "\n"; // выводим сообщение когда программа закончила работу (ну например 21:00:00)
}
}; // конец класса SomeClass 
 
 
int main()
{
{
SomeClass test; // создаем объект класса SomeClass с именем test
} // берем его (test) в фигурные скобки, что бы увидеть сообщения деструктора
 
system("pause");
return 0;
}
Добавлено через 9 минут
то, что я написал это то? отвечает заявленным требованиям?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
07.08.2013, 21:23     Конструктор и деструктор #27
VLK, елси верить автору, то это совершенно не то. Зачем выводить время работы при инициализации объекта раз, функция clock() возвращает количество тактов - два.
Хотя я понял. Подскажу - деструктор вызовется и без блока. Он уже в блоке - блоке функции main()
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 21:31     Конструктор и деструктор #28
Цитата Сообщение от iRomul Посмотреть сообщение
VLK, елси верить автору, то это совершенно не то. Зачем выводить время работы при инициализации объекта раз
Ответ:

Цитата Сообщение от Anastasiya1 Посмотреть сообщение
Отобразить на экране время работы программы, используя конструктор
Цитата Сообщение от iRomul Посмотреть сообщение
функция clock() возвращает количество тактов - два.
Что за такты?

Добавлено через 2 минуты
Цитата Сообщение от iRomul Посмотреть сообщение
Хотя я понял. Подскажу - деструктор вызовется и без блока. Он уже в блоке - блоке функции main()
Ну насчет фигурных скобок (блоков) я перемудрил наверное, если автору где то отчитываться по данной программе, то желательно убрать эти фигурные скобки (стр. 22 и 24 удалить), т.к. можно влететь в блудняк с ними (проще говоря не сможет их объяснить).
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
07.08.2013, 21:34     Конструктор и деструктор #29
Цитата Сообщение от VLK Посмотреть сообщение
Что за такты?
1 такт это единица времени, равная 1 \ CPU_FREQ
CPU_FREQ - частота процесса.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 21:38     Конструктор и деструктор #30
iRomul, так допустим если на выполнение программы у меня уйдет одинаковое количество времени, при этом в первом случае CPU_FREQ равно то что есть сейчас, а во втором CPU_FREQ возрастет в 2 раза, тогда и значение полученное при помощи clock() будет отличаться примерно в 2 раза?
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6160 / 2889 / 282
Регистрация: 04.12.2011
Сообщений: 7,689
Записей в блоге: 3
07.08.2013, 21:44     Конструктор и деструктор #31
Почитайте еще так может:
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
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
 
class b
{
public:
static const int diskret;//число милисекунд простоя на одну секунду общего времени задержки
int n;
clock_t timeAppStart;
clock_t timeAppStop;
clock_t timeOfAction;
void action(){//функция отсчета времени
clock_t timeAppWork=timeAppStart;//переменная текущего времени инициализируется временем старта
cout<<"Begins "<<endl;//печатаем в момент начала цикла отсчёта времени
int slp=(diskret*timeOfAction)/(CLOCKS_PER_SEC);//задержка в милисекундах
while (timeAppWork<timeAppStop){//сравнимаем текущее время и время остановки
Sleep(slp);//разгружаем процессор приостанавливая поток вычислений  
timeAppWork=clock();//получаем текущее время
n++;//считаем количество циклов (полезная работа))
if(n%diskret && n!=0)cout<<n<<endl;
}
cout<<endl<<"the time elapsed is "<<(double)(timeAppWork - timeAppStart)/CLOCKS_PER_SEC<<endl;
cout<<"The cycles number was "<<n<<endl;
}
b(clock_t timeOfAction_)
:timeOfAction(timeOfAction_)
{
n=0;    
timeAppStart = clock();//получаем время старта
timeAppStop = timeAppStart + timeOfAction;//считаем время окончания
action();//запускаем функцию отсчёта времени
}
~b()
{
timeAppStop=clock();
cout<<endl<<"Stoped"<<endl;
}
};
 
const int b::diskret = 100;//мне подходит, но можете увеличить или уменьшить
void lauchit_now(clock_t  timetowork){
b act(timetowork*CLOCKS_PER_SEC);
}
int main()
{
clock_t towork;
cout<<"Hi, input the time to work in seconds ";
cin>>towork;//протестировал на 10 (секунд)
cout<<endl;
 lauchit_now(towork);
cout<<endl<<endl;
cout<<"By, and press eny key to exit, please";
 cin.ignore();
 cin.get();
  return 0;
}
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 21:45     Конструктор и деструктор #32
http://cppstudio.com/uchebniki/yazyk...rogrammy-na-s/
вот статья, тут пишут:

Функция clock() возвращает значение времени в миллисекундах (1с = 1000млс). Причём отсчёт времени начинается с момента запуска программы.
они не правильно написали?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
07.08.2013, 21:47     Конструктор и деструктор #33
VLK, не знаю. Если процессоры одинаковые, но отличаются на частоту, то и время отличается одинаково. Но не буду утвержать

Добавлено через 1 минуту
VLK, в коде ИГПИГП видно, как он делит на CLOCKS_PER_SEC. А вот и статья с официального референса:
http://www.cplusplus.com/reference/ctime/clock/
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 21:48     Конструктор и деструктор #34
Цитата Сообщение от iRomul Посмотреть сообщение
VLK, не знаю. Если процессоры одинаковые, но отличаются на частоту, то и время отличается одинаково. Но не буду утвержать
Просто исходя из логики функция с именем clock будет выводить или текущее время (например 21:00:00) или время работы программы (например 500 мс) но вряд ли какие то такты процессора, не имеющие ни какого отношения к времени работы программы.

Главная фраза тут - "не имеющие ни какого отношения к времени работы программы".
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
07.08.2013, 21:50     Конструктор и деструктор #35
VLK, clock() это и означает частоту процессора. Зайдие в БИОС, в любую программу диагностики - там часто можно найти это слово в контексте процессора, любой другой частоты. Clock - не время, а часы. Время - time.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.08.2013, 21:53     Конструктор и деструктор #36
Цитата Сообщение от VLK Посмотреть сообщение
но вряд ли какие то такты процессора, не имеющие ни какого отношения к времени работы программы.
Вообще-то есть специальная константа CLOCKS_PER_SEC специально для перевода количества тактов во время - вот и самое прямое отношение.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 21:55     Конструктор и деструктор #37
т.е. получается надо clock() разделить на CLOCKS_PER_SEC (clock()/CLOCKS_PER_SEC) и тогда мы получим время работы программы?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.08.2013, 21:57     Конструктор и деструктор #38
Цитата Сообщение от VLK Посмотреть сообщение
т.е. получается надо clock() разделить на CLOCKS_PER_SEC (clock()/CLOCKS_PER_SEC)
Посты #19, #24 и #31 смотрели?
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.08.2013, 22:31     Конструктор и деструктор #39
Цитата Сообщение от Croessmah Посмотреть сообщение
Посты #19 и #31 смотрели?
Да, в 31 увидел и по этому спросил, лучше один раз услышать чем 100 раз догадаться неверно.

Добавлено через 13 минут
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
#include <iostream>
#include <time.h> // Подключаем библиотеку для работы с часами
 
class SomeClass // Создаем класс SomeClass
{
public:
SomeClass() // конструктор класса SomeClass 
{ 
std::cout << "SomeClass constructor..\n"; // выводим сообщение о срабатывании конструктора
std::cout << "Program worked " << clock()/1000 << " sec.. \n"; // выводим из конструктора время, которое программа работает, в секундах
}
 
~SomeClass() // деструктор
{ 
std::cout << "SomeClass destructor..\n";  // выводим сообщение о срабатывании деструктора
std::cout << "Program close: " << __TIME__ << " worked: " clock()/1000 << " sec..\n"; // выводим сообщение когда программа закончила работу (ну например 21:00:00) и сколько она проработала 
}
}; // конец класса SomeClass 
 
 
int main()
{
SomeClass test; // создаем объект класса SomeClass с именем test
 
system("pause");
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2013, 22:44     Конструктор и деструктор
Еще ссылки по теме:

C++ С++. Конструктор, деструктор
Конструктор и деструктор C++

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

Или воспользуйтесь поиском по форуму:
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
07.08.2013, 22:44     Конструктор и деструктор #40
VLK, совет на будующее избегайте магических констант
C++
1
std::cout << "Program worked " << clock()/1000 << " sec.. \n"; // выводим из конструктора время, которое программа работает, в секундах
как вот тут
Yandex
Объявления
07.08.2013, 22:44     Конструктор и деструктор
Ответ Создать тему
Опции темы

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