Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.07.2011, 20:22   #1
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию Прокоментируйте пару строк

Есть код:
Код:
bool operator!=(const String &right) const
{
    return !( *this == right ); //Что в этом случае возвращает return
                                //и как  вообще работает *this 
}
stenl1 вне форума
Старый 13.07.2011, 20:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Что в этом случае возвращает return
Только то, что написано. не (этот_объект равен переданному_в_параметре)

Цитата:
/и как вообще работает *this
Также как и любой другой указатель.
p51x вне форума
Старый 13.07.2011, 20:40   #3
SnX
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 114
По умолчанию

Цитата:
Что в этом случае возвращает return
Логично, что true или false.
Цитата:
и как вообще работает *this
this - указатель на объект класса.

Наверняка оператор == переопределен, так что смотри в нем, как сравниваются объекты.
SnX вне форума
Старый 13.07.2011, 21:18   #4
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию

Цитата:
this - указатель на объект класса.
Какой в этом случае объект класса ? Он же еще не определен
stenl1 вне форума
Старый 13.07.2011, 21:24   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Какой в этом случае объект класса ?
Текущий объект, который вызывает данный метод.

Цитата:
Он же еще не определен
Я вам даже больше скажу. Он не определяется, он создается.
p51x вне форума
Старый 13.07.2011, 21:32   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от SnX Посмотреть сообщение
Наверняка оператор == переопределен, так что смотри в нем, как сравниваются объекты.
Код:
bool operator==(const String &right) const
{
    return !( *this != right );
}
Carbon вне форума
Старый 13.07.2011, 21:34   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Он же еще не определен
а для методов он и не должен быть предопределенным.
Код:
String s("123"),b("321");
bool r=(s!=b);
где здесь не определенность this?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 14.07.2011, 19:00   #8
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от stenl1 Посмотреть сообщение
Есть код:
Код:
bool operator!=(const String &right) const
{
    return !( *this == right ); //Что в этом случае возвращает return
                                //и как  вообще работает *this 
}
Здесь приведен код функции члена класса, который определен внутри класса, а потому является встраиваемым, то есть по умолчанию имеет спецификатор inline, который очуществляет перегрузку стандартного оператора != для этого класса.

this - это указатель на объект класса, который будет вызывать этот оператор. Каждый раз, когда вы вызываете нестатическую функцию-член класса, компилятор передает в нее в качестве первого параметра указатель на сам объект.

То есть, чтобы было понятно, представим, что у вас есть некоторый класс

class A;
и выопределили в нем данную функцию-оператор.

Далее, допустим, вы определяете два объекта этого класса:

A a, b;

а затем пишите логическое выражение

a != b;

Когда компилятор видет такое выражение, то он ищет соответствующую функцию для объектов типа class A, которая перегружает оператор !=.

Фактически, он это выражение переписывает в виде

a.operator !=( b );

На первый взгляд кажется, что в эту функцию передается один аргумент - переменная 'b'. На самом деле компилятор передает два аргумента: указатель на объект 'a', который обозначается как this и значение объекта 'b'.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума
Старый 14.07.2011, 19:38   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
На самом деле компилятор передает два аргумента
Тут есть некоторая натяжка, впрочем, для упрощения понимания прокатит.
Указатель this в отличие от остальных аргументов передается не через стек, а через регистр ECX.
EUGY вне форума
Старый 14.07.2011, 20:06   #10
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Тут есть некоторая натяжка, впрочем, для упрощения понимания прокатит.
Указатель this в отличие от остальных аргументов передается не через стек, а через регистр ECX.

Не несите всякую чушь! Никакого такого регистра ECX в стандарте языка С++ упомнинания нет! Более того, я вас разочарую, но очень много аппаратных платформ, где вообще такой мнемоники для регистра нет! Так что свои фантазии оставьте при себе! К языку программирования С++ они никакого отношения не имеют!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прокоментируйте строчку... Natashka Milashka Общие вопросы Delphi 4 20.05.2011 07:54
Прокоментируйте код Romario92 Общие вопросы C/C++ 13 30.10.2010 22:49
Обьясните что делают и означают пару строк в программном коде! FreeZeT Общие вопросы C/C++ 2 15.06.2010 03:20
Расшифровать подробно пару строк программы prikolist Общие вопросы C/C++ 4 25.03.2009 22:50
Необходимо расшифровать пару строк программы prikolist Общие вопросы C/C++ 12 19.03.2009 22:08