На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Перегрузка ???
    Добрый день!

    Как мне перегрузть оператор << в классе, что бы можно было делать так:

    class CFoo
    {
    ...
    void operator <<(???) {???}
    ...
    };
    CFoo f;
    f << "Число" << 5;




    Спасибо. huh.gif
    Сообщение отредактировано: Mfcer__ -
      CFoo& CFoo::operator<<(char * a){...; return *this;};
      и
      CFoo& CFoo::operator<<(int a){...; return *this;};
      Сообщение отредактировано: Visitor -
        Должно быть так:
        class CFoo {
          ...
          CFoo& operator<<(char * text) {
             ...
             return *this;
          }
          CFoo& operator<<(int value) {
             ...
             return *this;
          }
          ...
        };


        -----------------------------------

        P.S. Какое единодушие. smile.gif
        Сообщение отредактировано: trainer -
          А почему именно используется знак & после CFoo? blink.gif
          Цитата
          trainer, 7.12.03, 20:41

          class CFoo {
            ...
            CFoo& operator<<(char * text) {
              ...
              return *this;
            }
          CFoo& operator<<(int value) {
              ...
              return *this;
            }
            ...
          };



          Добавлено в
          Да, и еще почему при объявлении функции некоторые делают так:
          void SomeFunc1(int& x);
          И чем это отличается от:
          void SomeFunc2(int x); ohmy.gif
            Срочно искать хорошую книгу по C++ smile.gif Иначе АХТУНГ!!!...

            выражение <тип> & означает ссылка на (т.е., фактически, адрес) переменную типа <тип>. Нужны ссылки, чтобы можно было оперировать физически одним объектом, не создавая его копии. В Си для етого использовались указатили, но указатели -- довольно опасная штука...
              При <тип> & создаётся псевдоним объекта.
              И обращение по укозателю немного медлнее, чем обращение по ссылке (скорее всего за счет доплнительной операции разыменования указателя).
              ЗЫ
              Купи себе Страуструп "Язык С++"3-е издание
                Как ето медленнее?
                Указатель и ссылка -- ето одно и то же, за исключением того, что практически невозможно, находясь в здравом уме и трезвой памяти, поместить в ссылку некорректное значение, или оставить ее неинициализированной. smile.gif
                  Цитата
                  Visitor, 7.12.03, 20:38
                  CFoo& CFoo::operator<<(int a){...; return *this;};

                  А почему тогда *this? blink.gif
                    Для политкорректности smile.gif

                    Ссылка синтаксически определяется как уже разыменованный указатель, т.е., инициализировать ее нужно именем объекта, а не именем указателя на него. А семантически -- как адрес объекта, т.е., содержит в себе именно адрес.
                      Цитата
                      Mfcer__, 8.12.03, 01:04
                      А почему тогда *this?
                      Чтобы вернуть ссылку на самого себя.
                        Ссылка и указатель немного разные вещи. Ссылка- это синоним переменной. А указатель токо указывает на неё (никогда не слышал про операцию разыменования ссылки)
                          Vot тут у класса B размер ровно на три указателя больше...
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0338 ]   [ 16 queries used ]   [ Generated: 4.05.24, 08:34 GMT ]