979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
1

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

24.08.2013, 21:49. Показов 8105. Ответов 23
Метки нет (Все метки)

Здорова господа!

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

От я набраса примерно манипулятор
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); допустим, потому что ошибка, я могу ее просто вызвать как функцию.

От интересно будет ли такая функция считаться манипулятором или то что выше в коде манипулятора, а если функция то это будет просто функция????? Просто в с++ двоичной системы нету, мне нужно вывод делать в двоично системе.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2013, 21:49
Ответы с готовыми решениями:

Как передать параметр в собственный манипулятор с параметром?
Ребята, вопрос, вот задача: Создать манипулятор endp(n), задающим условие перехода на новую...

Манипулятор ws
Собственно вопрос в следующем: может ли кто-то показать, как использовать манипулятор ws. Он, если...

Определить манипулятор
Что-то часто я тут начал писать... Но тем не менее... Задание определить манипулятор, который...

Setw() манипулятор
Проблема в том, что не могу разобраться как правильно отформатировать свою результат, хочу вывести...

23
Эксперт С++
2374 / 1658 / 279
Регистрация: 29.05.2011
Сообщений: 3,387
24.08.2013, 23:17 21
Цитата Сообщение от ninja2 Посмотреть сообщение
Это задачка из книги Страуструпа
Старуструп тот ещё придумщик. Он, кстати, говорит о полноценных манипуляторах, вставляемых в поток. И даже рассказывает как создавать манипуляторы с параметрами. Одна беда — стандартного способа нет, он зависит от реализации библиотеки, но это я уже говорил.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 23:41  [ТС] 22
Цитата Сообщение от grizlik78 Посмотреть сообщение
Он, кстати, говорит о полноценных манипуляторах, вставляемых в поток.
Не помню я сразу 7 глав СТЛ месяца 4 назад прочитал, щас от задачки все никак не дорешаю. Главу то я просмотрел перед тем как ее задачи решать, но там много информации, что фиг его знает на чем внимание акцентировать все все рамно не запомнить, хоть бери и заново читай, эту главу что я читал что не читал.

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

1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
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, советовал из функции вернуть строку и можно так же как я просто все в поток закинуть через функцию, в общем результат один и тот же, так что получается свой манипулятор тема не актуальная.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2013, 20:22
Помогаю со студенческими работами здесь

Написать свой манипулятор
Здравствуйте, подскажите пожалуйста, как для класса A, написать свой манипулятор, который вызвал бы...

Манипулятор std::endl
Добрый день! Манипулятор std::endl - это некая глобальная функция, но почему она пишется без...

Символ '\n' и манипулятор endl
Встретил в одной книге вот такое выражение (дословно): Если операционная система не использует...

Манипулятор ввода / вывода
Чем отличается манипулятор ввода\вывода от пользовательский ввод\вывод ?


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru