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

Перегрузка операторов вывода для русификации строк - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 17:44     Перегрузка операторов вывода для русификации строк #1
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
#include <iostream>
#include <string>
#include <windows.h>
 
using namespace std;
 
friend ostream operator << (ostream &in, const char text[])
{
    char *s = new char[500];
    CharToOem(text,s);
    in << s;
    delete s;
    return in;
}
 
void print(const char text[])
{
    char *s = new char[500];
    CharToOem(text, s);
    printf("%s\n", s);
    delete s;
}
 
int main()
{
    print("Охохо ііі");    
    system("pause");
    return 0;
}
Проблема в том, что я хочу перегрузить оператор "<<" но не знаю как, т.к. использовать функцию print() не очень удобно, как оказалось..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 18:07     Перегрузка операторов вывода для русификации строк #2
C++
1
2
3
4
5
6
7
8
ostream& operator << (ostream& out, LPCWSTR text)
{
    char *s = new char[500];
    CharToOem(text,s);
    out << s;
    delete s;
return out;
}
Никогда такого не делал. по крайне мере такой код запустился...
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 18:31  [ТС]     Перегрузка операторов вывода для русификации строк #3
а у меня - нет
wxDev-C++
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 18:32     Перегрузка операторов вывода для русификации строк #4
VS 2008
Ну даже так... в чем ошибка? Может не все так страшно?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 18:39  [ТС]     Перегрузка операторов вывода для русификации строк #5
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
#include <iostream>
#include <string>
#include <windows.h>
 
using namespace std;
 
ostream& operator << (ostream& out, const char text[])
{
    char *s = new char[500];
    CharToOem(text,s);
    out << s;
    delete s;
    return out;
}
 
void print(const char text[])
{
    char *s = new char[500];
    CharToOem(text, s);
    printf("%s\n", s);
    delete s;
}
 
int main()
{
    print("Охохо ііі");
//    cout << "ПАПар";
    system("pause");
    return 0;
}
хавает, но если убрать комент то вылет на том-же месте..
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
19.02.2010, 18:46     Перегрузка операторов вывода для русификации строк #6
outoftime, если я не ошибаюсь, вроде бы нельзя перегружать операторы для встроенных типов данных

Добавлено через 37 секунд
Напиши свой строковый класс, и для него перегружай вывод
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.02.2010, 19:07     Перегрузка операторов вывода для русификации строк #7
В gcc вот так работает:
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
#include <iostream>
#include <string>
#include <windows.h>
    
class RuText {
public:
    RuText() : p(NULL) {}
    RuText(const std::string& s){
        int len = s.size();
        p = new char [len + 1];
        CharToOem(s.c_str(), p);
    }
    ~RuText(){
        if ( p != NULL ){
            delete [] p;
            p = NULL;
        }
    }
    friend std::ostream& operator << (std::ostream& ost, const RuText& rt){
        ost << rt.p;
        return ost;
    }   
private:
    char *p;
};
 
int main(){
    std::cout << RuText("Хело, мир!") << std::endl;
    std::cout << RuText("Гудбай, мир!") << std::endl;
    return 0;
}
А мелкомягкий CL не нашёл CharToOem
Код
rutext.obj : error LNK2019: unresolved external symbol __imp__CharToOemA@8 refer
enced in function "public: __thiscall RuText::RuText(class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0RuTex
t@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
rutext.exe : fatal error LNK1120: 1 unresolved externals
Где-то тут на форуме было, как с этим бороться, лень искать...

Добавлено через 9 минут
В прочем, если в MS VS 2005 создать проект "console application", то
вот так
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
// rutext.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
 
class RuText {
public:
    RuText() : p(NULL) {}
    RuText(const std::string& s){
        int len = s.size();
        p = new char [len + 1];
        CharToOemA(s.c_str(), p);
    }
    ~RuText(){
        if ( p != NULL ){
            delete [] p;
            p = NULL;
        }
    }
    friend std::ostream& operator << (std::ostream& ost, const RuText& rt){
        ost << rt.p;
        return ost;
    }   
private:
    char *p;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << RuText("Хело, мир!") << std::endl;
    std::cout << RuText("Гудбай, мир!") << std::endl;
    system("PAUSE");
    return 0;
}
всё работает.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 19:07  [ТС]     Перегрузка операторов вывода для русификации строк #8
чем это: RuText("Хело, мир!")
отличается от этого: print("Охохо ііі")
удобности не придает, ладно всем спасибо, вижу что никак, отановлять на print()
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 19:20     Перегрузка операторов вывода для русификации строк #9
а если сделать print(const char* x, ...) чтобы она могла принимать много строк. так не будет удобнее?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.02.2010, 19:22     Перегрузка операторов вывода для русификации строк #10
outoftime, например тем, что можно вот так
C++
1
std::cout << "Some russian text: " << RuText("Бла бла бла") << " And some more..." << std::endl;
делать. А с Вашим print() такое не прокатит.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 21:13  [ТС]     Перегрузка операторов вывода для русификации строк #11
insideone, чем это удобнее?
easybudda, я просто покажу код, и вы сами все поймете (наверное)
my.hpp
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
#include <iostream>
#include <string.h>
#include <windows.h>
 
const int tSleep = 1500;
 
void print(const char s[])
{
    char *text = new char[strlen(s)+5];
    CharToOem(s, text);
    printf("%s", text);
    delete text;
}
 
namespace my
{
    int exit()
    {
        int exit = 0;
        while (exit != '2')
        {
            std::cin.clear();
            print("Виберiть дiю:\n\n");
            print("1 - вийти\t2 - продовжити\n");
            exit = getch();
            if (exit == '1')
            {
                system("cls");
                print("завершення..");
                Sleep(tSleep);
                return 1;
            }
            if (exit != '2')
            {
                system("cls");
                print("\nПомилка введення\tспробуйте ще раз ");
                Sleep(tSleep);
            }
            system("cls");
        }
        return 0;
    }
}
helper.cpp
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
#include <iostream>
#include <windows.h>
#include <conio.h>
#include "my.hpp"
 
using namespace std;
 
inline bool check(int &a) { return (a > 0 && a < 4); }
 
int main()
{
    int key;
    do 
    {
        system("cls");
        print("Виберiть дiю:\n\n");
        print("1 - запустити програму переведення чисел з однiєї системи числення в iншу;\n\n");
        print("2 - запустити програму переведення суми, рiзницi та добутку в прямий, обернений та доповняльний коди;\n\n");
        print("3 - вийти.\n");
        while ( !check(key = getch()-'0') ) { cin.clear(); print("\nПомилка введення\tспробуйте ще раз: "); }
        if (key == 1){system("cls"); system("a_in_b.exe");}
        if (key == 2){system("cls"); system("bynary.exe");}
        if (key == 3){system("cls"); print("завершення.."); Sleep(tSleep);}
    }
    while (key != 3);    
}
bynary.cpp
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <string>
#include <conio.h>
#include <windows.h>
#include <algorithm>
#include "my.hpp"
 
#define ABS(a) ( (a) < 0 ? -(a) : a )
#define FOR(i,a,b) for (int i = a, _n(b); i < _n; ++i)
 
using namespace std;
 
void Show(char *, int);
 
int main()
{
    while (1)
    {
        system("cls");
        int a, b;
        print("Введiть значення А: ");
        cin >> a;
        print("Введiть значення В: ");
        cin >> b;
        
        Show("A + B:", a+b);
        Show("A - B:", a-b);
        Show("B - A:", b-a);
        Show("A * B:", a*b);
        Show("A / B:", a/b);
        Show("B / A:", b/a);
             
        if (my::exit()) break;
    }
}
 
void Show(char *s, int n)
{
    cout << endl << s << endl;
    string d, D = "";
    d = (n < 0) ? "11." : "00.";
    n = ABS(n);
 
    print("в прямому кодi:       ");
    while (n) { D += (n&1)?'1':'0'; n >>= 1; }
    reverse(D.begin(),D.end());
    while (D.size() == 0) D = "0";
    cout << d << D << endl;
    
    print("в оберненому кодi:    ");
    cout << d;
    if (d == "11.")
    {
        FOR(i,0,D.size()) { cout << (D[i] == '0')?'1':'0'; }
        cout << endl;
    }
    else cout << "\b\b\b---" << endl;
    
    print("в доповняльному кодi: ");
    if (d == "11.")
    {
        int bot = D.size()-1;
        FOR(i,0,D.size()) D[i] = (D[i] == '0')?'1':'0';
        while (D[bot] == '1') { D[bot--] = '0'; if (bot < 0) break; }
        if (bot < 0) D = '1' + D;
        else D[bot] = '1';
    }
    cout << d << D << "\n\n";
}
a_in_b.cpp
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <windows.h>
#include <conio.h>
#include "my.hpp"
 
#define FOR(i,a,b) for (int i = a, _n(b); i < _n; ++i)
 
using namespace std;
 
//опис констант-----------------------------------------------------------------
const int base = 1000*1000;         //база числа в довгій арифметиці
 
//опис функцій------------------------------------------------------------------
void Menu();
void Notation(string &, int &, int &);
vector <int> NotationFrom(string, int &);
vector <int> NotationTo(vector <int>, int &);
string NotationDiv(string, int &, int &);
void Normalization(string &);
vector <int> Div(vector <int>, int, int &);
vector <int> Mult(vector <int>, int);
vector <int> Sum(vector <int>, vector <int>);
void Up(string &);
int Check();
int IsDigit(string &);
inline int IsPoint(char &s) { return s == '.'; }
 
//MAIN()------------------------------------------------------------------------
int main()
{
    Menu();
    return 0;
}
 
//меню програми----------------------------------------------------------------
void Menu()
{
    while (1)
    {
        int from, to;
        string s;
        print("Введiть початкову систему числення [2..36]: ");
        while( !(from = Check()) ) print("помилка введення\n\nспробуйте ще раз: ");
        cout << endl; print("Введiть кiнцеву систему числення [2..36]:   ");
        while( !(to = Check()) ) print("помилка введення\n\nспробуйте ще раз: ");
        print("\nВведiть число:                              ");
        cin >> s;
        cout << endl;
 
        Notation(s, from, to);
            
        if (my::exit()) break;
    }
}
 
//основна функція---------------------------------------------------------------
void Notation(string &s, int &from, int &to)
{
    //переводимо цілу частину в десяткову систему числення
    vector <int> res;
    Up(s);
    int count = 0;
    FOR(i,0,s.size()) 
    {
        if ( !IsPoint(s[i]) ) ++count;
        if ( IsPoint(s[i]) ) break;
    }    
    res = NotationFrom(s.substr(0,count), from);
    print("Десяткове представлення:\n");
    for (int i(res.size()-1); i > -1; --i)
        cout << res[i];
 
    //переводимо дробову частину в десяткову систему числення
    double dd = 0,
        base = 1;
    string ds = "", d = "";
    if (count < s.size())
    {
        s = s.substr(count+1, s.size()-count);
        FOR(i,0,s.size()) dd += (base /= from) * (s[i] - '0');
        FOR(i,0,10)
        {
            ds += int(dd *= 10) + '0';
            dd -= int(dd);
        }
        Normalization(ds);
        if(ds.size()) cout << "." << ds << endl;
        d = NotationDiv(s, from, to);
    }
    
    //переводимо число в бажану систему числення
    print("\n\nПредставлення числа в системi з основою "); 
    cout << to << ":" << endl;
    res = NotationTo(res, to);
    s.clear();
    for (int i(res.size()-1); i > -1; --i)
        s += ( (res[i]/10) ? (res[i] - 10 + 'A') : (res[i] + '0') );
    s += '.' + d;
    Normalization(s);
 
    cout << s << endl << endl;
}
 
//функція для переведення числа в 10-ву систему числення------------------------
vector <int> NotationFrom(string s, int &from)
{
    vector <int> res, d, b;
    res.push_back(0);
    b.push_back(1);
    for (int i(s.size()-1); i > -1; --i)
    {
        d.clear();
        d = Mult(b, (isalpha(s[i])) ? (int(s[i] - 'A') + 10) : (int(s[i] - '0')));
        res = Sum(res, d);
        b = Mult(b, from);
    }
    return res;
}
 
//функція для переведення числа в систему числення з основою 2..36--------------
vector <int> NotationTo(vector <int> a, int &to)
{
    vector <int> res;
    int carry = 0;
    while (a.size() != 1 || (a.back() != 0 && a.size() == 1) )
    {
        a = Div(a, to, carry);
        res.push_back(carry);
    }
    return res;
}
 
//переведення дробової частини числа
string NotationDiv(string s, int &from, int &to)
{
    string res = "";
    double d = 0, base = 1;
    FOR(i,0,s.size()) d += (base /= from) * (s[i] - '0');
    FOR(i,0,10)
    {
        res += int(d *= to) + '0';
        d -= int(d);
    }
    return res;
}
 
//ділення довгого на коротке, повернення результуючого вектора на остачі--------
vector <int> Div(vector <int> a, int b, int &carry)
{
    carry = 0;
    for (int i = (a.size()-1); i > -1; --i)
    {
        long long cur = carry * base + a[i];
        a[i] = int (cur / b);
        carry = int (cur % b);
    }
    while (a.size() > 1 && a.back() == 0) a.pop_back();
    return a;
}
 
//множення довгого на коротке, повернення результуючого вектора-----------------
vector <int> Mult(vector <int> a, int n)
{
    int carry = 0;
    for (int i = 0, _n(a.size()); i < _n || carry; ++i)
    {
        if (i == a.size()) a.push_back(0);
        long long cur = carry + a[i] * n;
        a[i] = (int) cur % base;
        carry = (int) cur / base;
    }
    return a;
}
 
//додавання 2-ох довгих, повернення результуючого вектора-----------------------
vector <int> Sum(vector <int> a, vector <int> b)
{
    if (a.size() < b.size()) swap(a,b);
    int carry = 0;
    for (int i = 0, _n(a.size()); i < _n || carry; ++i)
    {
        if (i == a.size())  a.push_back(0);
        if (i == b.size())  b.push_back(0);
        long long cur = a[i] + b[i] + carry;
        a[i] = (int) cur % base;
        carry = (int) cur / base;
    }
    return a;
}
 
//переведення стрічки у верхній регістр-----------------------------------------
void Up(string &s) { FOR(i,0,s.size()) if (isalpha(s[i])) s[i] += (s[i] >= 'a') ? ('A'-'a') : (0);  }
 
//перевірка на допустимий діапазон значень--------------------------------------
int Check()
{
    string s;
    cin >> s;
    stringstream tmp;
    tmp << s;
    int res;
    tmp >> res;
    return (res <= 36 && res >= 2 && IsDigit(s)) ? (res) : (0);
}
 
//перевірка чи являеться стрічка цілим числом-----------------------------------
int IsDigit(string &s)
{
    FOR(i,0,s.size()) if (s[i] < '0' || s[i] > '9') return 0;
    return 1;
}
 
//нормалізація стрічки
void Normalization(string &s)
{
    int count = 0;
    while (s[s.size()-count-1] == '0') ++count;
    if ( s[s.size()-count-1] == '.') ++count;
    s = s.substr(0, s.size() - count);
}
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 21:20     Перегрузка операторов вывода для русификации строк #12
Цитата Сообщение от outoftime Посмотреть сообщение
insideone, чем это удобнее?
Вместо << - запятая - вот почти вся разница. Почему нет?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 21:23  [ТС]     Перегрузка операторов вывода для русификации строк #13
я надеюсь вы не очень испугались)) здесь без 100 грам не обойтись..

Добавлено через 49 секунд
insideone, приведите мне пример, на моем коде
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 21:26     Перегрузка операторов вывода для русификации строк #14
C++
1
2
3
4
print("Виберiть дiю:\n\n");
print("1 - запустити програму переведення чисел з однiєї системи числення в iншу;\n\n");
print("2 - запустити програму переведення суми, рiзницi та добутку в прямий, обернений та доповняльний коди;\n\n");
print("3 - вийти.\n");
C++
1
2
3
4
5
6
print(
   "Виберiть дiю:\n\n", // запятая вместо <<
   "1 - запустити програму переведення чисел з однiєї системи числення в iншу;\n\n",
   "2 - запустити програму переведення суми, рiзницi та добутку в прямий, обернений та доповняльний коди;\n\n",
   "3 - вийти.\n"
);
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 21:36  [ТС]     Перегрузка операторов вывода для русификации строк #15
insideone, а, в этом смысле.. это мне не мешает, вот если-бы print()-ом можно было-бы выводить значения (так как в printf()), вот это уже другое дело..

Добавлено через 2 минуты
да, и если я не ошибаюсь ваш пример можно заменить на:
C++
1
2
3
4
5
6
print(
   "Виберiть дiю:\n\n"
   "1 - запустити програму переведення чисел з однiєї системи числення в iншу;\n\n"
   "2 - запустити програму переведення суми, рiзницi та добутку в прямий, обернений та доповняльний коди;\n\n"
   "3 - вийти.\n"
);
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 21:41     Перегрузка операторов вывода для русификации строк #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
class rus_ostream{
    ostream* out;
public:
    rus_ostream(){ out = &cout;};
    rus_ostream& operator <<(const char* text)
    {
        char* s = new char[500];
        CharToOemA(text, s);
        (*out) << s;
        delete s;
        return *this;
    }
} rcout;
 
int main(){
    rcout << "Привет мир!";
return 0;
}
Не знаю.... Вывело нормально Ничего не понимаю я короче в смысле жизни и все такое)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 21:41  [ТС]     Перегрузка операторов вывода для русификации строк #17
insideone, еще раз спасибо, а то я написал функцию и сам до сих пор полностью не понимаю какой обьем работы она может сделать))

ваш фрагмент заменил на:
C++
1
2
3
4
5
6
print(
            "Виберiть дiю:\n\n"
            "1 - запустити програму переведення чисел з однiєї системи числення в iншу;\n\n"
            "2 - запустити програму переведення суми, рiзницi та добутку в прямий, обернений та доповняльний коди;\n\n"
            "3 - вийти.\n"
        );
спасибо за подсказку, еще что-то видите?
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 21:47     Перегрузка операторов вывода для русификации строк #18
Цитата Сообщение от outoftime Посмотреть сообщение
спасибо за подсказку, еще что-то видите?
исчерпала себя))
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.02.2010, 22:25  [ТС]     Перегрузка операторов вывода для русификации строк #19
insideone, меня осенило!!! с вашей помощью, я понял как создать клас, который будет полным заменителем cout, мне просто надо переписать тоже для всех типов в заголовочном файле..

Добавлено через 20 минут
insideone, еще один вопрос:
как перегрузить std::endl для нового класа??

Добавлено через 10 минут
и как перевести один символ а не всю строку

Добавлено через 18 секунд
имеется в виду в кирилицу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2010, 22:30     Перегрузка операторов вывода для русификации строк
Еще ссылки по теме:

Перегрузка операторов ввода вывода C++
Перегрузка операторов ввода/вывода C++
Перегрузка операторов ввода и вывода C++

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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
19.02.2010, 22:30     Перегрузка операторов вывода для русификации строк #20
Цитата Сообщение от outoftime Посмотреть сообщение
insideone, еще один вопрос:
как перегрузить std::endl для нового класа??
C++
1
2
3
4
    rus_ostream& operator <<(rus_ostream& x){
        (*out) << std::endl;
    return *this;
    }
C++
1
rcout << "Привет мир!" << rcout << "Пока мир!";
Может не шибко красиво и может даже не правильно, но по крайне мере удобно.


Цитата Сообщение от outoftime Посмотреть сообщение
и как перевести один символ а не всю строку
Ну а это не тоже самое что переводить строку в котором 1 символ... или как?
Yandex
Объявления
19.02.2010, 22:30     Перегрузка операторов вывода для русификации строк
Ответ Создать тему
Опции темы

Текущее время: 11:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru