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

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

24.08.2013, 21:49. Показов 8107. Ответов 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
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 21:53 2
Цитата Сообщение от ninja2 Посмотреть сообщение
Просто в с++ двоичной системы нету, мне нужно вывод делать в двоично системе.
std::bitset http://www.cplusplus.com/reference/bitset/bitset/
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 21:54  [ТС] 3
Nekto, Да ладно я знаю, я имел введу что нету манипулятора такого как hex или dec.
0
Каратель
Эксперт С++
6605 / 4024 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.08.2013, 21:55 4
Цитата Сообщение от ninja2 Посмотреть сообщение
как hex
std::hex есть
0
3653 / 2990 / 828
Регистрация: 25.03.2012
Сообщений: 11,026
Записей в блоге: 1
24.08.2013, 21:57 5
Цитата Сообщение от Jupiter Посмотреть сообщение
std::hex есть
и чо? Он об этом и говорит!
std::hex есть в отличие от std::bin
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 21:59  [ТС] 6
Цитата Сообщение от Jupiter Посмотреть сообщение
std::hex есть
Да есть, но дело не в том, нужно вообще понять что такое манипуляторы и как создавать свои собственные.
0
Каратель
Эксперт С++
6605 / 4024 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.08.2013, 22:01 7

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
я имел введу что нету манипулятора такого как hex или dec.
а как это понимать?



Цитата Сообщение от ninja2 Посмотреть сообщение
значит получается cout функцию принимает?
да.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 22:04  [ТС] 8
От есть задачка: "Определите манипулятор вывода based, имеющий два аргумента — систему счисления и целое значение, и выводящий целое число в соответствии с указанной системой счисления. Например, based(2,9) должно вывести 1001."
Будет ли считаться манипулятором если я просто создам функцию
C++
1
2
3
4
5
6
void based(int a int n)
{
if(a==2) //вывод в двоичной системе
else if(a==16) //вывод в 16
else if(a==10)// вывод в 10
}
и если я эту функцию просто вызову based(2,9); это и будет манипулятор правильно ж?

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
а как это понимать?
я буду просто свою функцию вызывать если основа будет два
C++
1
2
3
4
5
6
void natob (int n)
{
    if (n>1) 
    natob(n/2);
    cout<<n%2;
}
если 16 то cout <<hex<<число;
если 10 то cout <<dec<<число;
0
Каратель
Эксперт С++
6605 / 4024 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.08.2013, 22:05 9
Цитата Сообщение от ninja2 Посмотреть сообщение
Будет ли считаться манипулятором если я просто создам функцию и если я эту функцию просто вызову based(2,9); это и будет манипулятор правильно ж?
нет
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 22:08  [ТС] 10
Цитата Сообщение от Jupiter Посмотреть сообщение
нет
А если такая функция будет:
C++
1
2
3
4
5
6
7
8
ostream& based(ostream& stream, int a, int n)
{
    if(a==2) //вызываем собственную функцию
        else if(a==10)cout<<dec<<n;
        else if(a==16)cout<<hex<<n;
 
    return stream;
}
И если я ее уже вызову отак
based(cout,2,9); то это тоже не манипулятор????
0
1404 / 646 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
24.08.2013, 22:08 11
inline ios_base& my_manipulator(ios_base& b)
Что-то типа такого.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 22:16  [ТС] 12
Цитата Сообщение от ninja2 Посмотреть сообщение
Например, based(2,9) должно вывести 1001.
Jupiter, Вот из этой строки можно вывод сделать что если я определю функцию void based(int,int) и вызову based(2,9) и она выведет 1001, значит она манипулятор. Если условие задачи внимательно почитать получается что функция и есть манипулятор ???

Добавлено через 3 минуты
Можно манипулятором считать функции которые меняют настройки потока, токо она не через там инструменты так сказать определенные манипуляторы потока изменила поток, а сама как бы вручную, то значит получается что она и есть манипулятор? Это имеется в веду void based(int,int);
0
Эксперт С++
2374 / 1658 / 279
Регистрация: 29.05.2011
Сообщений: 3,387
24.08.2013, 22:17 13
Не знаю изменилось ли чего в C++11, но до него стандартного способа определить манипулятор с аргументами не было.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 22:19  [ТС] 14
grizlik78,
Цитата Сообщение от grizlik78 Посмотреть сообщение
Не знаю изменилось ли чего в C++11, но до него стандартного способа определить манипулятор с аргументами не было.
То есть четко сказать нельзя что это манипулятор, а это нет правильно ж? Тогда задачку решить не составляет труда, написать функцию да и все дела.
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,726
24.08.2013, 22:19 15
ninja2, если охота писать вроде
C++
1
std::cout << bin << 42;
то ничего не получиться, по крайней мере без костылей.
0
Эксперт С++
2374 / 1658 / 279
Регистрация: 29.05.2011
Сообщений: 3,387
24.08.2013, 22:29 16
Цитата Сообщение от ninja2 Посмотреть сообщение
То есть четко сказать нельзя что это манипулятор, а это нет правильно ж?
Почему нельзя? Сказали же уже. Не манипулятор это. Манипулятор можно вставлять в потоки ввода и вывода с помощью операторов << и >>. А просто функция — это просто функция, пусть даже она изменяет настройки потока.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 22:40  [ТС] 17
Цитата Сообщение от grizlik78 Посмотреть сообщение
Манипулятор можно вставлять в потоки ввода и вывода с помощью операторов << и >>. А просто функция — это просто функция, пусть даже она изменяет настройки потока.
А от смотри условие задачи: "Определите манипулятор вывода based, имеющий два аргумента — систему счисления и целое значение, и выводящий целое число в соответствии с указанной системой счисления. Например, based(2,9) должно вывести 1001."

Тут же видно что манипулятором называется функция based, значит получается что функции тоже бывают манипуляторами? Почему ты так думаешь, если в поток нельзя вставить, то значит не манипулятор?
0
Эксперт С++
2374 / 1658 / 279
Регистрация: 29.05.2011
Сообщений: 3,387
24.08.2013, 22:46 18
Ну в принципе, можно заставить based(2, 9) возвращать "1001" в виде std::string или указателя на какой-то статический буфер. Тогда даже в поток можно будет вставить. Но не знаю кто придумал называть это манипулятором. А конструкция based(2) << 9 для стандартного потока работать не будет.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
24.08.2013, 22:50  [ТС] 19
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но не знаю кто придумал называть это манипулятором.
Это задачка из книги Страуструпа, так что можно верить, разве что перевод мог исказить смысл но наврятли, так что как есть так есть, под манипуляторами понимают видимо действие, а не конструкцию языка.
0
5224 / 3196 / 362
Регистрация: 12.12.2009
Сообщений: 8,101
Записей в блоге: 2
24.08.2013, 22:50 20
Цитата Сообщение от grizlik78 Посмотреть сообщение
А конструкция based(2) << 9 для стандартного потока работать не будет.
Ну почему - пару костылей и все заработает)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2013, 22:50
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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