Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лафоре. Программирование в С++, помогите сделать упражнение 
:(
    Опции темы
Hawaii
Дата 12.6.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 5.6.2007

Репутация: нет
Всего: нет



Посидел часок. Сам додумался и решил более простым способом, как мне кажется. 
Код
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class Time
   {
   private:
      int hrs, mins, secs;
   public:
      Time() : hrs(0), mins(0), secs(0)
         {  }
                                       
      Time(int h, int m, int s) : hrs(h), mins(m), secs(s)         
         {  }

      void display()              
         { cout << hrs << ":" << mins << ":" << secs; cout << endl; }

      Time operator ++()                
      {                                  
            ++secs;                      
            if(secs > 59)                
             {secs -= 60; ++mins ;}      
            if(mins > 59)                
             {mins -= 60; ++hrs;}        
            if(hrs >= 24)                
             {hrs-=24;}                 
                                         
       return Time (hrs, mins, secs);    
      }                                 
      Time operator --()
      { 
           --secs;
           if(secs <0)
             {secs+=60; --mins ;}
           if(mins <0)
             {mins += 60; --hrs;}
           if(hrs <0)
             {hrs+=24;}
        return Time (hrs, mins, secs);        
      } 
      Time operator ++(int)
      { 
        int h = hrs;
        int m = mins;
        int s = secs;
            ++secs;                      
            if(secs > 59)                
             {secs -= 60; ++mins ;}      
            if(mins > 59)                
             {mins -= 60; ++hrs;}        
            if(hrs >= 24)                
             {hrs-=24;} 
        return Time (h, m, s);            
      }
      Time operator --(int)
      {
        int h = hrs;
        int m = mins;
        int s = secs;
           --secs;
           if(secs <0)
             {secs+=60; --mins ;}
           if(mins <0)
             {mins += 60; --hrs;}
           if(hrs <0)
             {hrs+=24;}
        return Time (h, m, s);
      }
   };
////////////////////////////////////////////////////////////////
int main()
   {
   Time time1(0, 0, 0);
   Time time2;
   
   time1++;
   time1.display(); 
   
   time2 = time1++;
   time1.display();
   time2.display();
   
   cout << endl;
   system("PAUSE");
   return 0;
   }



Добавлено через 2 минуты и 12 секунд
Цитата(Xenon @ 12.6.2007,  22:27)
Damarus, ну просто в книге пример такой smile

В какой книге??? smile 
PM MAIL   Вверх
Xenon
Дата 12.6.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Hawaii, У Лафоре такой пример книге, к тому же тема об этой книге smile
А по поводу твоей реализации - префиксный оператор должен возвращать значение по ссылке, то есть самого себя (this), а в отродоксальном каноническом классе постфиксный оператор должен быть реализован через префиксный и должен возвращать объект по значению.


--------------------
user posted image  
PM MAIL   Вверх
NeuZeitgeist
Дата 4.5.2009, 12:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Возвращаясь к строкам. У меня вот такое решение этой задачи. Все работает. Только вывод пришлось делать через printf, потому что cout выводит число в экспоненциальной форме. Не нашел, как его заставить выводить число с запятой.
Код

#include<iostream>
#include<stdlib.h>
#include<math.h>

using namespace std;
const int M = 30;

class money
{
    private:
        char mon_ch1[M];//деньги-строка
        char mon_ch2[M];//деньги-строка
        double mon_d;//деньги-число
    public:
        double mstold()
        {
            unsigned int i = 0, j = 0;
            cin >> mon_ch1;
            for(i = 0; i < strlen(mon_ch1); i++)
            if((mon_ch1[i] >= '0' && mon_ch1[i] <= '9') || mon_ch1[i] == '.')
            {
                mon_ch2[j] = mon_ch1[i];
                j++;
            }
            mon_ch2[j] = '\0';
            mon_d = strtod(mon_ch2, NULL);
            return mon_d;
        }
};

int main()
{
    money mon;
    double m;
    cout << "Vvedite chislo" << endl;
    m = mon.mstold();
    printf ("\nChislo ravno %.2lf\n", m);
    return 0;
}


PM   Вверх
zim22
Дата 4.5.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(NeuZeitgeist @  4.5.2009,  12:11 Найти цитируемый пост)
Не нашел, как его заставить выводить число с запятой.

Код

cout << fixed << setprecision(5) << m << endl;



--------------------
PM MAIL   Вверх
NeuZeitgeist
Дата 4.5.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Ой, спасибо! Теперь будет все как нужно. smile
PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0892 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.