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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегрузка, cout<<ob+ob...возможно ли такое 
V
    Опции темы
observateur
Дата 18.11.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

#include "stdafx.h"
#include <iostream>
using namespace std;
class money
{
private: int funt,silling,penny;

public: money():funt(0),silling(0),penny(0)
        {}    

        friend istream& operator>>(istream& s, money& m);
        friend ostream& operator<<(ostream& s, money& m);
};
///////////////////////////////////////
istream& operator>>(istream& s, money& m)
{
    cout<<"Enter funt: ";            s>>m.funt;    
    cout<<"Enters silling: ";        s>>m.silling;    
    cout<<"Enter penny: ";        s>>m.penny;

    return s;
}
ostream& operator<<(ostream& s, money& m)
{
    s<<m.funt<<": funt\n"<<m.silling<<": silling\n"<<m.penny<<": penny\n";

    return s;
}
int main(int argc, char* argv[])
{

    money mon1,mon2;
    cout<<"Enter first money:\n ";
    
    cin>>mon1;

    cout<<"\nEnter second money:\n ";
    
    cin>>mon2;

    cout<<endl<<mon1<<endl<<mon2;

    return 0;
}

вопрос у меня такой могу ли я перегрузит  операцию << и + что бы одним выражением у меня получилась такая функция
Код
cout<<mon1+mon2;
 

PM MAIL   Вверх
Kuvaldis
Дата 18.11.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



observateur, 
Цитата

вопрос у меня такой могу ли я перегрузит  операцию << и + что бы одним выражением у меня получилась такая функция

Можешь, но для этого придется прегружить операцию сложения для твоего класса money
Точное определение сложения напишешь сам, а я покажу схему:
функция friend
Код

money operator + (const money& m1, const money& m2)
{
       money temp = m1;
      temp.funt + =  m2.funt;  
      ....
      return temp;
}

Существенно то, что возвращается объект
Поэтому при вызове такой конструкции
Код

cout<< (mon1+mon2);

Вычислится сумма, вернется объект (один), а для него есть перегруженный оператор <<  smile 
P.S. скобки обязательны (как и для других типов, включая стандартные, например, int)

Это сообщение отредактировал(а) Kuvaldis - 18.11.2006, 18:07


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
observateur
Дата 18.11.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Kuvaldis @  18.11.2006,  17:54 Найти цитируемый пост)
скобки обязательны (как и для других типов, включая стандартные, например, int)

Код

#include "stdafx.h"
#include <iostream>
using namespace std;


int main(int argc, char* argv[])
{
    int a=5;
    int b=15;

    cout<<a+b<<endl;



    return 0;
}


а вот ...без скобок можно же здесь обойтис....

Добавлено @ 18:02 
между прочим давно тебя не видно  ....как дела....
PM MAIL   Вверх
MAKCim
Дата 18.11.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Код

money money::operator + (const money& m1, const money& m2)
{
       money temp = m1;
      temp.funt + =  m2.funt;  
      ....
      return temp;
}


в этом случае operator+ должен быть friend-ом, а не member-ом
кроме того должно быть
Цитата

friend ostream& operator<<(ostream& s, const money& m);

потому как возможна лишь константная ссылка на временный объект, который из operator+ возвращается

Это сообщение отредактировал(а) MAKCim - 18.11.2006, 18:05


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Kuvaldis
Дата 18.11.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



observateur, 
Цитата

а вот ...без скобок можно же здесь обойтис....

Да.. Погарячился, но я всегда ставлю, для убийства неоднозначности...
Но не в этом дело... Я тебе про другое говорю... А это частности

MAKCim
согласен, "и на старуху бывает проруха" - на автомате писал smile 

Это сообщение отредактировал(а) Kuvaldis - 18.11.2006, 18:06


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
observateur
Дата 18.11.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



спасибо товарищи у меня все OK.... благодарен....

Цитата(MAKCim @  18.11.2006,  18:04 Найти цитируемый пост)
в этом случае operator+ должен быть friend-ом, а не member-ом

да я так и сделаль..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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