Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перегрузка <<

89K
23 сентября 2014 года
chopsfull
1 / / 17.09.2014
Нужно перегрузить оператор "<<" как член класса, ничего не выходит, выручайте
326
23 сентября 2014 года
sadovoya
757 / / 19.11.2005
В любой книжке по С++
11K
25 сентября 2014 года
xAtom
65 / / 17.01.2011
Код:
#include <iostream>


class varchar {
private:
    char buf[255];
public:

    friend std::ostream& operator << (std::ostream& _o, const varchar& s){
         return _o.write(s.buf, strlen(s.buf));
    }

    friend std::istream& operator >> (std::istream& _i, varchar& s){
         return _i.getline(s.buf, sizeof(s.buf) - 1);
    }
};


int main(void){
    varchar v;

    std::cin  >> v;
    std::cout << v;

    std::cin.sync();
    return 0;
}
326
26 сентября 2014 года
sadovoya
757 / / 19.11.2005
Не то. Если понимать под << помещение в поток, то дружественная функция нужна. Если понимать как сдвиг влево - то член класса.
Перегружайте сдиг, а не потоковый вариант.


Код:
#include <cstdio>

class SomeClass {
    unsigned int _n;
public:
    SomeClass(unsigned int n = 0) : _n(n) {}
    void print() {
        printf("%u\n", _n);
    }
    SomeClass operator << (unsigned int shift_cnt) {
        return SomeClass(_n << shift_cnt);
    }
};

int main() {

    SomeClass sc1(8);
    SomeClass sc2 = (sc1 << 2); //сдвиг на 2 равносил. удвоению два раза
    sc2.print(); // 8 * 2 * 2 = 32


    return 0;
}
P.S. здесь скобки не обязательно sc2 = (sc1 << 2), просто с ними наглядней.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог