Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: помогите с перегрузкой +=  (Прочитано 10480 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
ZaVyLoN
Интересующийся

by
Offline Offline

« : 17-04-2010 09:46 » 

Помогите, пожалуйста, перегрузить += (нужно сложить все money)

И правильно ли я перегрузил >>, <<, [] !?

Код:
#include <iostream>
#include <locale>
#include <ctime>
 
using namespace std;
 
struct Fin
{
        int day;
        double money;
};
class Buh
{
        Fin *pFin;
        int sz;
public:
       
        Buh(int size = 0)
        {
                srand(time(0));
                sz = size = 31;
 
                pFin = new Fin[sz];
                for(int i = 0; i < sz; i++)
                {
                        //pFin[i].money = (rand()/100)/10.0;
                        pFin[i].day = i + 1;
                }
        }
//Перегрузка []-----------------------------------------------------------
        Fin& operator[] (int i)
        {
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                return pFin[i];
        }
        //--------
        void add();
        void show();
        friend istream& operator>> (istream& is, Buh& a);
        friend ostream& operator<< (ostream& os, Buh& a);
       
};
//Перегрузка оператора вв -------------------------------------------------
istream& operator>> (istream& is, Buh& d)
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        for(int j = 0; j < d.sz; j++)
        {
                is>>d.pFin[j].money;
        }
        return is;
}
//Перегрузка оператора выв ------------------------------------------------
 
ostream& operator<< (ostream& os, Buh& a)
{
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        for(int i = 0; i < a.sz; i++)
        {
                os<<a.pFin[i].day<<" "<<a.pFin[i].money<<endl;
        }
        return os;
}
//------------------------------------------------------------------
 
 
//------------------------------------------------------------------
void Buh::add()
{
        for(int i = 0; i < sz; i++)
        {
                cin>>pFin[i].money;
        }
 
}
 
void Buh::show()
{
        for(int i = 0; i < sz; i++)
        {
                cout<<"В "<<pFin[i].day<<"-й день "<<pFin[i].money<<"$"<<endl;
        }
}
 
int main()
{
        setlocale(0, "rus");
               
        Buh h;
        char c;
       
        do
        {
                system("cls");
                cout<<"Выберите пожалуйста действие:\n\t1 - Ввод данных;\n\t2 - Просмотреть учет;\n\t3 - Доход;\n\te - Exit;"<<endl;
                cin>>c;
                switch(c)
                {
                        case '1':
                                system("cls");
                                cout<<"Введите пожалуйста money:\n";
                                h.add();
                                system("cls");
                                break;
 
                        case '2':
                                system("cls");
                                cout<<"Данные вашей бухгалтерии за целый месяц:\n";
                                h.show();
                                system("PAUSE");
                                break;
 
                        case '3':
                                system("cls");
                                cout<<"Sum = :\n";
                                // sum =  :confused:
                                system("PAUSE");
                }
        }while(c != 'e');
       
 
 
       
        return 0;
}
« Последнее редактирование: 19-04-2010 07:18 от ZaVyLoN » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 18-04-2010 05:48 » new

что должен делать оператор "!" ?

оператор "+=" - для какого класса то ? )


а с [] я хотя бы так сделал бы
Код:
	Fin& operator[] (int i)
{
static Fin_null;
if(!pFin || i>=sz)return Fin_null;//уже безопаснее
return pFin[i];
}


Записан

ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #2 : 18-04-2010 18:56 » 

Спасибо за []
С остальным сам разобрался. )
« Последнее редактирование: 19-04-2010 03:52 от Sel » Записан
ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #3 : 18-04-2010 22:38 » 

Народ, по-моему, я неправильно перегрузил опрераторы вв/выв

Помогите мне!
« Последнее редактирование: 19-04-2010 03:51 от Sel » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 19-04-2010 02:51 » 

ZaVyLoN, чтобы ответить на этот вопрос, сначала нужно узнать, что ДОЛЖНЫ эти операторы у тебя делать ?
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #5 : 19-04-2010 04:59 » 

Алексей1153++, не надо безопасней, ни кто не говорил, что оператор должен контролировать границы и не известно, что выберет разработчик, безопасность или скорость
вектор например, для этих целей (контроль границ) использует метод at

кроме, того то что ты написал, это на самом деле сокрытие проблемы в коде, лучше уж бросать исключение
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 19-04-2010 05:10 » 

LogRus, это уже он сам пусть додумывает, я только указал, где будет поломка )
Записан

ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #7 : 19-04-2010 07:09 » 

народ, у меня возникли сомнения правильно ли я перегрузил >>, << !?Не понялНе понял

Что Вы мне скажете!?Не понял
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 19-04-2010 07:11 » 

ZaVyLoN, скажи, работает, как надо ? Если да - то правильно )
Записан

ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #9 : 19-04-2010 07:19 » 

если всатвить стороку
   сout<<"fvfsvdv"<<endl;

вместо строки в коде
                     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

оно же должно по идее вывести "fvfsvdv",но не выводит!!!
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 19-04-2010 10:29 » 

1) "fvfsvdv" - это не обьект класса Buh и, соответственно, это не проблема с его (класса) перегруженными методами.
2) Может что-то выводит: ошибку, предупреждение или еще чего интересного?
Записан
ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #11 : 20-04-2010 09:05 » 

я разобрался  в своих ошибках,
в main вв и выв сделал правильно cin>>h;, cout<<h, ну и все остальное!!

У меня есть Еще вопрос, на другую тему, решил не забивать форум новыми темами спрошу сдесь

как написать цифровые часы!? (h:m:s)
и заменть циферки нужно на свои
например:
****
*    *
****
*    *
****
помогите плз, как бы еще не доконца сам разобрался

я так понимаю нету такой функции чтобы выводила текущеее время и и часы чтобы ишли!
знаю тока что можно получить текущее время, а там дальше например используя sleep(1000) заставить их идти!!
наверное способ не очень!!, пока ничего др не придумал
HELP ME!!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines