Каракули в консоле на С++ и как с этим бороться (Перегрузка оператора ввода\вывода)
Модератор: Модераторы разделов
-
MPak
- Сообщения: 24
Каракули в консоле на С++ и как с этим бороться
Второй год пишу на VС++ и мучаюсь с каракулями в консолях. Решение проблемы я нашел а точнее почти...
Нужно перегрызить оператор вывода вставив ф-цию: CharToOem()
Вот пример работы ф-ции:
#include<windows.h>
#include<iostream.h>
main()
{
char p[10];
CharToOem("Привет мир , Hello world ",p)
cout<<p<<endl;
}
Выводит:
Привет мир , Hello world
У меня возникла проблема: не могу запихать ф-цию в перегрузку оператора.
Приведите пример как это можно сделать.
Нужно перегрызить оператор вывода вставив ф-цию: CharToOem()
Вот пример работы ф-ции:
#include<windows.h>
#include<iostream.h>
main()
{
char p[10];
CharToOem("Привет мир , Hello world ",p)
cout<<p<<endl;
}
Выводит:
Привет мир , Hello world
У меня возникла проблема: не могу запихать ф-цию в перегрузку оператора.
Приведите пример как это можно сделать.
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Каракули в консоле на С++ и как с этим бороться
а какое отношение перекодировка для вывода на виндовую консоль в ВизуалСтудии имеет к линуксфоруму?
слава роботам!
-
MPak
- Сообщения: 24
Re: Каракули в консоле на С++ и как с этим бороться
И всетаки как?
...
Хочешь сказать, что на линуксе будет все по русски а не по ХЗ как??!!??
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Каракули в консоле на С++ и как с этим бороться
Именно. Это чисто виндовая проблема, заключающаяся в том, что консоль работает в досовской кодировке, а редактор ВС -- в виндовой; и это никак не лечится. Ну, т.е. можно сделать консоль виндовой, но тогда все остальные программы в ней будут косячить, а вот в редакторе поменять кодировку нельзя. И функция CharToOem, походу, тоже чисто ВС-ная.Хочешь сказать, что на линуксе будет все по русски а не по ХЗ как??!!??
Кстати..
До mem allocation errorа ещё не доэкспериментировались?char p[10];
CharToOem("Привет мир , Hello world ",p)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
MPak
- Сообщения: 24
Re: Каракули в консоле на С++ и как с этим бороться
Ну не дописал нолик в скобочках, но ведь суть вопроса не в этом была. Я хотел научиться перегружать оператор вывода применяя ф-цию к вводимой в cout'те строке...
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Каракули в консоле на С++ и как с этим бороться
Это я так, на всякий случай.Ну не дописал нолик в скобочках, но ведь суть вопроса не в этом была.
По ходу, форум и правда не тот выбрали для таких вопросов.. Ну ладно, я понимаю, что суть не меняется. А как вы собираетесь его перегружать, кстати? По-моему, варианта два: либо писать заново и туда встраивать CharToOem, либо вызывать существующую реализацию метода <<. Но как вы собираетесь её вызывать, если она будет перегружена?Я хотел научиться перегружать оператор вывода применяя ф-цию к вводимой в cout'те строке...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
MPak
- Сообщения: 24
Re: Каракули в консоле на С++ и как с этим бороться
Ну допустим не через cout<<, а создав новую ф-цию вывода например pout<<...
Я пока не очень хорошо знаю язык чтобы эксперементировать с подобными вещами. Если можно приведите пример подобной ф-ции.
Я пока не очень хорошо знаю язык чтобы эксперементировать с подобными вещами. Если можно приведите пример подобной ф-ции.
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Каракули в консоле на С++ и как с этим бороться
Допустим, << -- это не функция, а оператор. Я не настолько хорошо помню С++ (точнее сказать, совсем его не помню), чтобы сказать слёту как создать потомок класса, перегрузив только этот оператор. Если нужна именно функция, могу набросать. Но у меня по ходу дела вопрос: как вы собираетесь научиться программированию, если такие элементарные вещи спрашиваете на форуме?Ну допустим не через cout<<, а создав новую ф-цию вывода например pout<<...
Я пока не очень хорошо знаю язык чтобы эксперементировать с подобными вещами. Если можно приведите пример подобной ф-ции.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: Каракули в консоле на С++ и как с этим бороться
Ну допустим не через cout<<, а создав новую ф-цию вывода например pout<<...
Я пока не очень хорошо знаю язык чтобы эксперементировать с подобными вещами. Если можно приведите пример подобной ф-ции.
оператор << можно перегрузить так:
Код: Выделить всё
std::ostream& operator<<(std::ostream& os, YourClass& obj)
{
/*...*/
return os;
}где YourClass - твой класс, для которого ты хочешь перегрузить оператор,
P.S. а вообще в любой мало-мальски толковой книги по плюсам всё это напимано. Слепым тыканием ничего, имхо, не добьёшься.
-
MPak
- Сообщения: 24
Re: Каракули в консоле на С++ и как с этим бороться
Я в "общем" знаю как перегружать оператор но как в перегруженный оператор ф-цию вставить я не понял...
Хоть чемто помогите.
Прочел штук пять, а именно этого в них не нашел
Хоть чемто помогите.
P.S. а вообще в любой мало-мальски толковой книги по плюсам всё это напимано. Слепым тыканием ничего, имхо, не добьёшься.
Прочел штук пять, а именно этого в них не нашел
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: Каракули в консоле на С++ и как с этим бороться
как в перегруженный оператор ф-цию вставить
поясните
Прочел штук пять, а именно этого в них не нашел
Страуструпа читали?
-
MPak
- Сообщения: 24
Re: Каракули в консоле на С++ и как с этим бороться
как в перегруженный оператор ф-цию вставить
поясните
Поясняю: применить к вводимой в ковычках строке какую либо ф-цию
Прочел штук пять, а именно этого в них не нашел
Страуструпа читали?
Читал, и не только Страуструпа. Там описана перегрузка оператора<< но именно этого там я не нашел.
Если можешь приведи пример такой перегрузки.
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: Каракули в консоле на С++ и как с этим бороться
применить к вводимой в ковычках строке какую либо ф-цию
по сути это значит перегрузку оператора "" =)
а поскольку кавычки не входят в список операторов, которые можно перегружать - сотворить такое невозможно.
а чем не устраивает перегрузка << или применение к строке явной функции?
-
oav
- Бывший модератор
- Сообщения: 296
Re: Каракули в консоле на С++ и как с этим бороться
Asgard писал(а): ↑07.11.2005 01:46применить к вводимой в ковычках строке какую либо ф-цию
по сути это значит перегрузку оператора "" =)
а поскольку кавычки не входят в список операторов, которые можно перегружать - сотворить такое невозможно.
а чем не устраивает перегрузка << или применение к строке явной функции?
http://rsdn.ru/article/qna/ui/concp.xml?print
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Каракули в консоле на С++ и как с этим бороться
Код: Выделить всё
#include <iostream>
using namespace std;
typedef struct { char* string; } ConvertedString;
ConvertedString convert(const char *s, char* ss){
strcpy(ss, s);
ConvertedString b;
b.string = ss;
while(*ss)
(*(ss++))++;
return b;
}
std::ostream& operator<<(std::ostream& os, ConvertedString str){
os << str.string;
return os;
}
std::ostream& operator<<(std::ostream& os, const char* str){
char* c = new char[strlen(str)+1];
os << convert(str, c);
delete[] c;
return os;
}
int main(){
cout << "abcdef" << endl;
return 0;
}очень странная отмазка "именно этого там я не нашел." я порадовался (:
а если тебе на работе дадут задание написать прогу, ты будешь искать именно это прогу в книгах? а потом начальству так и скажешь: "вот именно такую программу не нашел"???
мало читать Страуструпа. надо еще и думать.
причем, желательно головой, а не жопой всем остальным....
слава роботам!
-
MPak
- Сообщения: 24
Re: Каракули в консоле на С++ и как с этим бороться
очень странная отмазка "именно этого там я не нашел." я порадовался (:
Извини, я не так выразился... Кстати, спасибо за ф-ции, правда я сам уже переписал
из другой книги. Нашел всетаки...
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни