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

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

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

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

24.08.2013, 21:49. Просмотров 2343. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 21:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Собственный манипулятор (C++):

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

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

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

Не работает манипулятор setw(n) - C++
Здравствуйте, написал маленькую программку по разделу из книги, чтобы лучше понять как работает манипулятор setw(n), однако при компиляции...

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

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

23
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
24.08.2013, 22:29 #16
Цитата Сообщение от ninja2 Посмотреть сообщение
То есть четко сказать нельзя что это манипулятор, а это нет правильно ж?
Почему нельзя? Сказали же уже. Не манипулятор это. Манипулятор можно вставлять в потоки ввода и вывода с помощью операторов << и >>. А просто функция — это просто функция, пусть даже она изменяет настройки потока.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 22:40  [ТС] #17
Цитата Сообщение от grizlik78 Посмотреть сообщение
Манипулятор можно вставлять в потоки ввода и вывода с помощью операторов << и >>. А просто функция — это просто функция, пусть даже она изменяет настройки потока.
А от смотри условие задачи: "Определите манипулятор вывода based, имеющий два аргумента — систему счисления и целое значение, и выводящий целое число в соответствии с указанной системой счисления. Например, based(2,9) должно вывести 1001."

Тут же видно что манипулятором называется функция based, значит получается что функции тоже бывают манипуляторами? Почему ты так думаешь, если в поток нельзя вставить, то значит не манипулятор?
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
24.08.2013, 22:46 #18
Ну в принципе, можно заставить based(2, 9) возвращать "1001" в виде std::string или указателя на какой-то статический буфер. Тогда даже в поток можно будет вставить. Но не знаю кто придумал называть это манипулятором. А конструкция based(2) << 9 для стандартного потока работать не будет.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 22:50  [ТС] #19
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но не знаю кто придумал называть это манипулятором.
Это задачка из книги Страуструпа, так что можно верить, разве что перевод мог исказить смысл но наврятли, так что как есть так есть, под манипуляторами понимают видимо действие, а не конструкцию языка.
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
24.08.2013, 22:50 #20
Цитата Сообщение от grizlik78 Посмотреть сообщение
А конструкция based(2) << 9 для стандартного потока работать не будет.
Ну почему - пару костылей и все заработает)
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
24.08.2013, 23:17 #21
Цитата Сообщение от ninja2 Посмотреть сообщение
Это задачка из книги Страуструпа
Старуструп тот ещё придумщик. Он, кстати, говорит о полноценных манипуляторах, вставляемых в поток. И даже рассказывает как создавать манипуляторы с параметрами. Одна беда — стандартного способа нет, он зависит от реализации библиотеки, но это я уже говорил.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
24.08.2013, 23:41  [ТС] #22
Цитата Сообщение от grizlik78 Посмотреть сообщение
Он, кстати, говорит о полноценных манипуляторах, вставляемых в поток.
Не помню я сразу 7 глав СТЛ месяца 4 назад прочитал, щас от задачки все никак не дорешаю. Главу то я просмотрел перед тем как ее задачи решать, но там много информации, что фиг его знает на чем внимание акцентировать все все рамно не запомнить, хоть бери и заново читай, эту главу что я читал что не читал.

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

ninja2
231 / 187 / 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, советовал из функции вернуть строку и можно так же как я просто все в поток закинуть через функцию, в общем результат один и тот же, так что получается свой манипулятор тема не актуальная.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 20:22
Привет! Вот еще темы с ответами:

Создайте манипулятор вывода - C++
Помогите срочно решить задачу Создайте манипулятор вывода sethex(), который осуществляет вывод в шестнадцатеричной системе счисления и...

Написать свой манипулятор - C++
Здравствуйте, подскажите пожалуйста, как для класса A, написать свой манипулятор, который вызвал бы функцию класса? Чтобы манипулятор мог...

Как создать манипулятор с параметрами? - C++
Манипулятор без параметров создать то просто //g++ 5.4.0 #include &lt;iostream&gt; std::ostream&amp; addok (std::ostream&amp; os) { ...

Что делает манипулятор flush? - C++
Доброго времени суток! Не могу толком разобраться, что делает манипулятор flush.Нужен простой пример в коде, как работает flush,...


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

Или воспользуйтесь поиском по форуму:
24
Yandex
Объявления
26.08.2013, 20:22
Ответ Создать тему
Опции темы

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