Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> operator casting 
:(
    Опции темы
JackYF
Дата 25.2.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  23.2.2008,  19:52 Найти цитируемый пост)
operator String ()

Код

operator String() const

пробуй. И пользуйся тегом с подстветкой С++, пожалуйста.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 26.2.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



Неа, не зацепило(((
PM MAIL   Вверх
JackYF
Дата 26.2.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  23.2.2008,  19:52 Найти цитируемый пост)
String operator+(const String& str)const

ага, понял. потому как первый аргумент не объект класса String.

Для того, чтобы это заработало, вынеси operator+ во внешнюю функцию с двумя аргументами String.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 28.2.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



Код

cout<<(String)s1("This")+s2; //Так тоже сработало

JackYF,  Только не знаю что предпочтительней....интерфейс менять что то не хочется....?

Вот следующая проблема:

Для работы с константными обьектами..
я делаю так:

class String:

Код

SubString String::operator()(const char* substr)
{
    SubString sstr(*this, substr);
    return  sstr;
}

const SubString String:: operator()(const char* substr)const
{
    SubString sstr(*this, substr);
    return  sstr;
}

        
SubString String::operator()(int position, size_t length)
{
    SubString sstr(*this, position, length);
    return sstr;
}

const SubString String::operator()(int position, size_t length)const
{
    SubString sstr(*this, position, length);
     return sstr;
}    


SubString String::operator()(int position)
{
    SubString sstr(*this, position);
    return sstr;
}

const SubString String::operator()(int position)const
{
    SubString sstr(*this, position);
    return sstr;
}


т.е. по паре операторов 1 для const  другой обычный...

class SubString
Код

//.......
          //constructors
            SubString(String & str, const char* sstr);  
            SubString(String & str, int position, size_t length=0);
....
         SubString& operator = (const String& source);// izmenyaet this!!!
.....

Должно работать так:
Код

const String s1 ("Ku-ku");
s1("-")="mu" //Compilation Error - s1 is const 


Но не работает...ругается на приведении типов (const - ne const)
Как быть?




PM MAIL   Вверх
JackYF
Дата 28.2.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  28.2.2008,  22:20 Найти цитируемый пост)
интерфейс менять что то не хочется

фанатизм? вынесение оператора+ в функции вне класса - распространённая практика, и для строк, в частности, тоже

Цитата(sol78 @  28.2.2008,  22:20 Найти цитируемый пост)
s1("-")="mu" //Compilation Error - s1 is const 

абсолютно верно. Это дикий кусок кода, зачем он может быть нужен?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 28.2.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



Цитата(JackYF @ 28.2.2008,  23:25)
фанатизм? вынесение оператора+ в функции вне класса - распространённая практика, и для строк, в частности, тоже


Согласна, но  это каснется не только одного оператора +, но ище штук 7-8 таких же....
Цитата

абсолютно верно. Это дикий кусок кода, зачем он может быть нужен?

Ничего дикого тут нет....s1("-")="mu" - эта комбинация напоминает некий аналог copy-paste , когда работаем в Worde
Цитата

абсолютно верно

это вы о чем?
PM MAIL   Вверх
JackYF
Дата 28.2.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  28.2.2008,  22:36 Найти цитируемый пост)
Согласна, но  это каснется не только одного оператора +, но ище штук 7-8 таких же....

не понял, почему?

Цитата(sol78 @  28.2.2008,  22:36 Найти цитируемый пост)
s1("-")

подстрока константного объекта по определению константна, а ты хочешь ей чего-то присвоить...

Цитата(sol78 @  28.2.2008,  22:36 Найти цитируемый пост)
это вы о чем? 

о том, что компилятор верно ругается



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 28.2.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



да правильно все, так и должно быть, для этого и весь сыр-бор....
Проблема не там....
Код

const SubString String:: operator()(const char* substr)const
{
    SubString sstr(*this, substr); //например тут мне не нужно чтобы this был конст????
    return  sstr;
}

 


PM MAIL   Вверх
JackYF
Дата 29.2.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  28.2.2008,  22:59 Найти цитируемый пост)
SubString sstr(*this, substr)

Код

const SubString sstr(*this, substr);



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 29.2.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



JackYF,  неаб не помогло...
Код

const SubString String:: operator()(const char* substr)const
{
    const SubString sstr(*this, substr); //ругается на *this, что он не кост
    return  sstr;
}


PM MAIL   Вверх
JackYF
Дата 29.2.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  29.2.2008,  15:08 Найти цитируемый пост)
const SubString sstr(*this, substr); 

Код

const SubString sstr(const_cast<const String&>(*this), substr);



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 29.2.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



JackYF,  не работает...
Что делает оператор const_cast<const String&>?
PM MAIL   Вверх
JackYF
Дата 29.2.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  29.2.2008,  20:26 Найти цитируемый пост)
то делает оператор const_cast<const String&>? 

вообще - изменение константности.
а если так: "const_cast<String&>"?

Цитата(sol78 @  29.2.2008,  20:26 Найти цитируемый пост)
JackYF,  не работает...

и ошибку, ошибку в студию...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sol78
Дата 1.3.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



Вот так заработало
Код

const SubString String:: operator()(const char* substr)const
{
     SubString sstr(const_cast<String&>(*this), substr);
    return  sstr;
}

Обьясните, плз ,какова тут функция оператора const_cast<String&>(*this)...Я этот оператор никогда не использавала?
Если интерфейс констуктора для субстринга:
Код

 SubString([String & str, const char* sstr);  
 


PM MAIL   Вверх
JackYF
Дата 1.3.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  1.3.2008,  17:43 Найти цитируемый пост)
какова тут функция оператора const_cast<String&>(*this)

в данной функции *this имеет тип const String&, так это константная функция класса. Конструктор же вышеуказанный принимает String&, а не const String&, следовательно мы используем const_cast - отмену константности.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.