Форум программистов, компьютерный форум CyberForum.ru

Собственный манипулятор - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 21:49     Собственный манипулятор #1
Здорова господа!

Я пытаюсь создать свой собственный манипулятор, который будет принимать основу числа: десять шестнадцать и два и само число, и будет выводить число в соотсветствующей системе счисления.

От я набраса примерно манипулятор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//манипулятор вывода
ostream& based(ostream& stream)
{
    cout <<"mu tyt"<<endl;
    return stream;
}
 
int main()
{
    cout <<based;
 
    return 0;
}
от в этой строчке не сильно понятно что происходит cout <<based; ??? это равносильно cout.operator<<(based); как такое может быть? based это ж функция и что у нас он принимает походу указатель на функция, если я не ошибаюсь, точно не помню, имя функции это и есть указатель на функцию, значит получается cout функцию принимает?

Мне вообщето нужно написать токой based который бы принимал бы два инт аргумента и выводил число в соответствующей системе счисления, если я определю такую функцию, то я ее так вызвать не могу cout <<based(2,9); допустим, потому что ошибка, я могу ее просто вызвать как функцию.

От интересно будет ли такая функция считаться манипулятором или то что выше в коде манипулятора, а если функция то это будет просто функция????? Просто в с++ двоичной системы нету, мне нужно вывод делать в двоично системе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 21:49     Собственный манипулятор
Посмотрите здесь:

C++ манипулятор ввода\вывода
C++ Создайте манипулятор вывода
Определить манипулятор C++
Манипулятор ws C++
Как передать параметр в собственный манипулятор с параметром? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
24.08.2013, 23:17     Собственный манипулятор #21
Цитата Сообщение от ninja2 Посмотреть сообщение
Это задачка из книги Страуструпа
Старуструп тот ещё придумщик. Он, кстати, говорит о полноценных манипуляторах, вставляемых в поток. И даже рассказывает как создавать манипуляторы с параметрами. Одна беда — стандартного способа нет, он зависит от реализации библиотеки, но это я уже говорил.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 23:41  [ТС]     Собственный манипулятор #22
Цитата Сообщение от grizlik78 Посмотреть сообщение
Он, кстати, говорит о полноценных манипуляторах, вставляемых в поток.
Не помню я сразу 7 глав СТЛ месяца 4 назад прочитал, щас от задачки все никак не дорешаю. Главу то я просмотрел перед тем как ее задачи решать, но там много информации, что фиг его знает на чем внимание акцентировать все все рамно не запомнить, хоть бери и заново читай, эту главу что я читал что не читал.

Добавлено через 5 минут
Мне от кажется, что я его некогда не дочитаю, я уже 800 страниц прочитал, там 4 главы осталось и приложения, да конец самый тяжелый.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
25.08.2013, 00:09     Собственный манипулятор #23
мб тут чтот будет понятно
Миниатюры
Собственный манипулятор   Собственный манипулятор   Собственный манипулятор  

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 20:22     Собственный манипулятор
Еще ссылки по теме:

Символ '\n' и манипулятор endl C++
Написать свой манипулятор C++
C++ Собственный графический интерфейс

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.08.2013, 20:22  [ТС]     Собственный манипулятор #24
В общем прочитал раздельчик про манипуляторы и там написано от что, манипуляторы это функции манипуляторы, можно записать отак:
C++
1
2
3
4
5
cout <<x;
cout.flush();
cout <<y;
cin.unsetf(ios_base::skipws);
cin >>x;
Такая запись затрудняет понимание кода, поетому применяют манипуляторы которые можно вставить в << отак:
C++
1
2
cout <<x<<flush()<<y;
cin >>noskipws>>x;
Так просто код понятней становится, ну и для создания пользовательских манипуляторов, нужно от по такой схеме их создавать, в книге так советуют создавать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
using std::dec;
using std::hex;
#include <sstream>
using std::ostringstream;
 
void natob (int n, ostringstream& ost)
{
    if (n>1)
    natob(n/2,ost);
    ost<<n%2;
}
 
class based;
 
struct based_manip
{
    based& b;
    int oc;
    int val;
    based_manip(based& a,int b, int c):b(a),oc(b),val(c){}
};
 
class based
{
    friend ostream& operator<<(ostream& os, based_manip bm);
public:
    based_manip& operator()(int a, int b){return based_manip(*this,a,b);}
 
};
 
ostream& operator<<(ostream& os, based_manip bm)
{
    ostringstream ost;
    if(bm.oc==2) natob(bm.val,ost);
    else if(bm.oc==10) ost <<dec<<bm.val;
    else if(bm.oc==16) ost <<hex<<bm.val;
    return os <<ost.str();
}
 
int main()
{
    based based1;
    cout <<based1(2,9)<<endl;
 
    return 0;
}
В общем так от делать, код конечно запутанный и многие новички не разберут что тут происходит, кто не разберет , то можно просто как товарищ grizlik78, советовал из функции вернуть строку и можно так же как я просто все в поток закинуть через функцию, в общем результат один и тот же, так что получается свой манипулятор тема не актуальная.
Yandex
Объявления
26.08.2013, 20:22     Собственный манипулятор
Ответ Создать тему
Опции темы

Текущее время: 03:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru