![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 17.04.2011
Сообщений: 9
|
![]()
Добрый день!
Есть ли возможность в VC++ перезагружать статические операторы (т.е. для базовых типов, вне класса)? Пример: class AnsiString{ private: char *_data; ... public: operator char *() { return _data; } AnsiString operator+ ( char *Str ){ AnsiString _ret = _data; _ret._append(Str); return _ret; } ... }; Перезагружены операторы класса, позволяющие делать это: AnsiString str1, str2; char *ch = str1 + str2; А хотелось бы делать это: AnsiString str = "строка 1" + "строка 2"; Не существует преобразования (AnsiString) = (char *)+(char *) По логике вещей нужно было бы перезагрузить статический оператор как то так: AnsiString char:: operator+ (char *Str){ return AnsiString(this)+Str; } но это не работает. Есть идеи, что нужно сделать? |
![]() |
![]() |
![]() |
#2 |
Регистрация: 17.04.2011
Сообщений: 9
|
![]()
И еще вопрос - как перезагрузить операцию (AnsiString *) = (char *):
AnsiString:: operator char *() { return _data; } перезагружает (AnsiString) = (char *): как описать то же самое для (AnsiString *) |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 03.10.2010
Сообщений: 321
|
![]()
перегрузи оператор = и складывай strcat()
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 17.04.2011
Сообщений: 9
|
![]()
Перезагрузить где? В AnsiString? Это позволяет делать
(AnsiString) = (char *). Я же спрашиваю про (AnsiString) = (char *) + (char *) Это разбивается на: (char *) = (char *) + (char *); // НЕ СРАБОТАЕТ!!! (AnsiString) = (char *); А должно быть (AnsiString) = (char *) + (char *); (AnsiString) = (AnsiString); Как это сделать, я не понял... |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 03.10.2010
Сообщений: 321
|
![]()
(AnsiString) = strcat(char*,char*)
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Не перезагрузить, а перегрузить. Нельзя определять поведение операторов для базовых типов, только для пользовательских (классы, структуры). Придётся писать так:
Код:
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
![]()
моно попробывать сделать так:
перегрузить operator+(AnsiStr a, AnsiStr b) {...} и чтобы в AnsiStr был конструктор AnsiStr(char*) , тогда будут вызываться конструкторы a и b . |
![]() |
![]() |
![]() |
#8 |
Регистрация: 17.04.2011
Сообщений: 9
|
![]() |
![]() |
![]() |
![]() |
#9 | |
Регистрация: 17.04.2011
Сообщений: 9
|
![]() Цитата:
![]() По поводу AnsiString(str_1) + str_2; сейчас так и делаю. Не очень красиво. Я подумал, может как то обойти можно. |
|
![]() |
![]() |
![]() |
#10 |
Регистрация: 17.04.2011
Сообщений: 9
|
![]()
Есть такой конструктор. Но это ничего не дает. Нужно, чтобы (char *)+(char *) воспринималось как (AnsiString)+(char *), но для этого нужно преобразовать (char *) в (AnsiString), не используя методы AnsiString. Т.е. нужно перегружать char, но такое невозможно - так написали выше...
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
сортировка статических структур | mego4el | Помощь студентам | 1 | 22.02.2011 23:17 |
с++ инициализация статических елементов класса | p_alex | Помощь студентам | 5 | 25.10.2009 16:52 |
Перезагрузка операторов | Maxim_Burea | Помощь студентам | 5 | 23.09.2009 15:30 |
Перезагрузка операторов в C++ (помогите плиз) | 3s3e3r3e3g3a3 | Фриланс | 7 | 22.09.2009 21:51 |
Перегрузка операторов, Организация перегрузки операторов | chagin_yav | Помощь студентам | 2 | 12.05.2008 09:15 |