C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Конструктор\деструктор  (Прочитано 1701 раз)
Алиса
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 2


Конструктор\деструктор
« : 21 Октябрь 2009, 21:17:47 »

Класс Time описан в отдельном заголовочном файле,надо записать эту же прогу ,но используя конструктор и деструктор ,не выходит((
// lr_2.cpp

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "time1.h"

int main(int argc, char* argv[])
{
 Time t;
  t.set_time();
  t.print_time();
  t.add_hour();
  t.print_time;
  t.time_razn();
 return 0;
}


class Time
{
   
 protected:
  int h;   
  int m;   
  int s;

 public:
  void set_time()
  {
    printf("Count hour (0-23):\t");
    scanf("%d",&h);
    printf("Count min (0-59):\t");
    scanf("%d",&m);
    printf("Count sec (0-59):\t");
    scanf("%d",&s);
  }

  void print_time()
  {
   if (h    {
     if (m     {
     if(s      else printf("\nTime:\t0%d:0%d:%d\n",h,m,s);
     }
     else
    {
      if(s      else printf("\nTime:\t0%d:%d:%d\n",h,m,s);
     }
   }
   else
   {
    if (m    {
    if(s     else printf("\nTime:\t%d:0%d:%d\n",h,m,s);
    }
    else
    {
    if(s    else printf("\nTime:\t%d:%d:%d\n",h,m,s);
    }
   }
  }

  void add_hour()
  {
   int hh;
   printf("Vvedite count add hours:\n");
   scanf("%d",&hh);
   h+=hh;
   print_time();
  }
 
 
 void time_razn()
 {
  int hh,mm,ss;
  puts("Raznost=Time2-Time1");
  puts("Time1:");
  set_time();
  print_time();
  hh=h;
  mm=m;
  ss=s;
  puts("Time2:");
  set_time();
  print_time();
  printf("Raznost=%d:%d:%d\n",h-hh,m-mm,s-ss);         
 }
};
Записан
ChikenpUH
Участник


Сказали спасибо: +11/-5
Offline

Сообщений: 296


Re: Конструктор\деструктор
« Ответ #1 : 21 Октябрь 2009, 23:58:27 »

ну так добавь в паблик конструктор
Time(); и код

Код
Time :: Time()
{
set_time();
print_time();
add_hour();
print_time;
time_razn();
}


и эти строки убери из кода программы
это требовалось?
деструктор тут не нужен, ибо память не выделяется
« Последнее редактирование: 22 Октябрь 2009, 13:04:57 от ChikenpUH » Записан
zema
Участник


Сказали спасибо: +1/-0
Offline

Сообщений: 4


Re: Конструктор\деструктор
« Ответ #2 : 22 Октябрь 2009, 14:09:52 »

не понятна задача,
конструктор инициализирует объект класса(то есть его данные). В данном случае данные это
int h;   
  int m;   
  int s;

их надо обнулить.
Time() : h(0), m(0), s(0)
{}

кстати они объявлены как protected: не принципиально, но здесь логичнее сделать private:

метод void time_razn() тоже какой-то нелогичный
он должен определять разницу между ДВУМЯ временами(то есть между двумя объектами типа Time)
то есть примерно так
Time t1;
Time t2;
...
print_time_razn(t1, t2);

то есть он не является методом класса, а просто ф-ия(глобальная).
если хотите совсем красиво можно в классе определить оператор вычитания, но думаю это еще вам рано

Предлагаю такое объявлени класса Time ( реализацию пишите сами )
class Time
{
public:
 Time() : h(0), m(0), s(0)  // конструктор по умолчанию
{}

 void print(); // бывший print_time()
 void input(); // бывший set_time()
 void addHour(int dh);

// методы доступа к часам минутам секундам
 int h() const {return h;};
 int m() const;
 int s() const;

private:
  int h;   
  int m;   
  int s;
};

void print_time_razn(const Time & t1, const Time & t2)
{
 printf("Raznost=%d:%d:%d\n",t1.h()-t2.h(),t1.m()-t2.m(), t1.s()-t2.s());
}

и тогда у вас
main()
{
Time t1;
ti.input();
t.print();

Time t2;
t2.input();
t2.print();

print_time_razn(t1, t2);

}

Записан
Алиса
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 2


Re: Конструктор\деструктор
« Ответ #3 : 23 Октябрь 2009, 00:06:34 »

Спасибо большое,особенно за простоту ответов )))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.097 секунд. Запросов: 23.