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

С++ для начинающих

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

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

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

От интересно будет ли такая функция считаться манипулятором или то что выше в коде манипулятора, а если функция то это будет просто функция????? Просто в с++ двоичной системы нету, мне нужно вывод делать в двоично системе.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 21:53     Собственный манипулятор #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Просто в с++ двоичной системы нету, мне нужно вывод делать в двоично системе.
std::bitset http://www.cplusplus.com/reference/bitset/bitset/
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 21:54  [ТС]     Собственный манипулятор #3
Nekto, Да ладно я знаю, я имел введу что нету манипулятора такого как hex или dec.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.08.2013, 21:55     Собственный манипулятор #4
Цитата Сообщение от ninja2 Посмотреть сообщение
как hex
std::hex есть
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
24.08.2013, 21:57     Собственный манипулятор #5
Цитата Сообщение от Jupiter Посмотреть сообщение
std::hex есть
и чо? Он об этом и говорит!
std::hex есть в отличие от std::bin
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 21:59  [ТС]     Собственный манипулятор #6
Цитата Сообщение от Jupiter Посмотреть сообщение
std::hex есть
Да есть, но дело не в том, нужно вообще понять что такое манипуляторы и как создавать свои собственные.
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.08.2013, 22:01     Собственный манипулятор #7

Не по теме:

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



Цитата Сообщение от ninja2 Посмотреть сообщение
значит получается cout функцию принимает?
да.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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<<число;
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.08.2013, 22:05     Собственный манипулятор #9
Цитата Сообщение от ninja2 Посмотреть сообщение
Будет ли считаться манипулятором если я просто создам функцию и если я эту функцию просто вызову based(2,9); это и будет манипулятор правильно ж?
нет
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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); то это тоже не манипулятор????
Dani
1276 / 634 / 55
Регистрация: 11.08.2011
Сообщений: 2,272
Записей в блоге: 2
Завершенные тесты: 1
24.08.2013, 22:08     Собственный манипулятор #11
inline ios_base& my_manipulator(ios_base& b)
Что-то типа такого.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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);
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
24.08.2013, 22:17     Собственный манипулятор #13
Не знаю изменилось ли чего в C++11, но до него стандартного способа определить манипулятор с аргументами не было.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 22:19  [ТС]     Собственный манипулятор #14
grizlik78,
Цитата Сообщение от grizlik78 Посмотреть сообщение
Не знаю изменилось ли чего в C++11, но до него стандартного способа определить манипулятор с аргументами не было.
То есть четко сказать нельзя что это манипулятор, а это нет правильно ж? Тогда задачку решить не составляет труда, написать функцию да и все дела.
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
24.08.2013, 22:19     Собственный манипулятор #15
ninja2, если охота писать вроде
C++
1
std::cout << bin << 42;
то ничего не получиться, по крайней мере без костылей.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
24.08.2013, 22:29     Собственный манипулятор #16
Цитата Сообщение от ninja2 Посмотреть сообщение
То есть четко сказать нельзя что это манипулятор, а это нет правильно ж?
Почему нельзя? Сказали же уже. Не манипулятор это. Манипулятор можно вставлять в потоки ввода и вывода с помощью операторов << и >>. А просто функция — это просто функция, пусть даже она изменяет настройки потока.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 22:40  [ТС]     Собственный манипулятор #17
Цитата Сообщение от grizlik78 Посмотреть сообщение
Манипулятор можно вставлять в потоки ввода и вывода с помощью операторов << и >>. А просто функция — это просто функция, пусть даже она изменяет настройки потока.
А от смотри условие задачи: "Определите манипулятор вывода based, имеющий два аргумента — систему счисления и целое значение, и выводящий целое число в соответствии с указанной системой счисления. Например, based(2,9) должно вывести 1001."

Тут же видно что манипулятором называется функция based, значит получается что функции тоже бывают манипуляторами? Почему ты так думаешь, если в поток нельзя вставить, то значит не манипулятор?
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
24.08.2013, 22:46     Собственный манипулятор #18
Ну в принципе, можно заставить based(2, 9) возвращать "1001" в виде std::string или указателя на какой-то статический буфер. Тогда даже в поток можно будет вставить. Но не знаю кто придумал называть это манипулятором. А конструкция based(2) << 9 для стандартного потока работать не будет.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 22:50  [ТС]     Собственный манипулятор #19
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но не знаю кто придумал называть это манипулятором.
Это задачка из книги Страуструпа, так что можно верить, разве что перевод мог исказить смысл но наврятли, так что как есть так есть, под манипуляторами понимают видимо действие, а не конструкцию языка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 22:50     Собственный манипулятор
Еще ссылки по теме:

C++ Не работает манипулятор setw(n)
C++ Показать на примере, как использовать манипулятор std::ws класса istream
Как использовать манипулятор flush в консольном приложении с++ C++
Манипулятор ввода, который поочередно то считывает, то пропускает каждые десять символов C++
Не работает самописный манипулятор вывода C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 1
24.08.2013, 22:50     Собственный манипулятор #20
Цитата Сообщение от grizlik78 Посмотреть сообщение
А конструкция based(2) << 9 для стандартного потока работать не будет.
Ну почему - пару костылей и все заработает)
Yandex
Объявления
24.08.2013, 22:50     Собственный манипулятор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru