Страница 2 из 3
Re: .
Добавлено: 29 окт 2009, 15:04
Airhand
BBB писал(а):
Прочитал его несколько раз, но так и не понял, о чем в нем говорится.
Что тут растолковывать ? После перегрузки опраторы класса стают как бы "внешними", а "внешние" функции не имеют доступа к private-членам класса. Именно поэтому они и определены как friend. Можно сделать изврат: объявить по паре паблик-функций для каждого приватного или защищённого члена-данных класса Set/Get. Я знаю, что это - изврат, зато избавимся от friend.
Re: Класс "комплексные числа"
Добавлено: 29 окт 2009, 15:56
Romeo
" писал(а):В реализации он и так доберётся до членов private: внутри класса есть доступ ко всем членам
Ты как обычно доминируешь. Похоже, о внешних и внутренних операторах ты не слышал.
" писал(а):После перегрузки опраторы класса стают как бы "внешними", а "внешние" функции не имеют доступа к private-членам класса
После перегрузки они "стают" (copyright
Airhand) внешними? А до перегрузки, соответственно они внутренними были?
Если это операторы КЛАССА, то это всегда операторы с внутренней декларацией. Если операторы внешние, то они не являются операторами КЛАССА. У нас здесь пример как раз внешних операторов.
Научись правильно излагать свои мысли. Твои посты неприятно читать, поскольку они написаны неграмотно, как с точки зрения русского языка, так и с технической точки зрения.
.
Добавлено: 29 окт 2009, 15:59
BBB
Airhand писал(а):После перегрузки опраторы класса стают как бы "внешними", а "внешние" функции не имеют доступа к private-членам класса. Именно поэтому они и определены как friend.
А это я не то же самое написал по сути?
Если уберешь [Из описания операторов friend], ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
Или, спрошу "мягче": чем написанное мной противоречит написанному тобой?
И ты объявил это ахинеей.
А если уж задаться целью убрать 'friend', то это можно сделать и "без извратов". А именно, первым из описанных МНОЙ выше способов (оставил в классе для примера только один оператор сложения):
Код: Выделить всё
class Complex
{
public:
Complex(double the_real, double the_imaginary);
Complex(double real_part);
Complex();
Complex operator + (const Complex& second);
private:
double real;
double imagine;
};
Complex::Complex(double the_real, double the_imaginary): real(the_real), imagine(the_imaginary)
{
//Тело намеренно оставлено пустым
}
Complex::Complex(double real_part): real(real_part), imagine(0)
{
//Тело намеренно оставлено пустым
}
Complex::Complex(): real(0), imagine(0)
{
//Тело намерено отсавлено пустым
}
Complex Complex: :o perator + (const Complex& second)
{
Complex temp;
temp.real = this->real + second.real;
temp.imagine = this->imagine + second.imagine;
return temp;
}
Re: .
Добавлено: 29 окт 2009, 17:20
Airhand
Romeo писал(а):Научись правильно излагать свои мысли. Твои посты неприятно читать, поскольку они написаны неграмотно, как с точки зрения русского языка, так и с технической точки зрения.
Ты, как всегда, ничего не понял и давай меня грязью поливать.
BBB писал(а):А это я не то же самое написал по сути?
Ты сказал дословно:
Если уберешь, ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
То есть в реализации класса недоступна секция private.
Re: .
Добавлено: 29 окт 2009, 17:36
BBB
Airhand писал(а):Ты сказал дословно:
Если уберешь, ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
То есть в реализации класса недоступна секция private.
Если для тебя слова "реализация этих операторов" (которые в том случае НЕ ЯВЛЯЮТСЯ членами класса) эквивалентны словам "реализация класса", то это твои проблемы. Точнее, проблемы того, что ты плаваешь в теории (половину знаю, а половину не понял). Т.к. (еще раз повторю) у Dragon-а перегрузку бинарных операторов была релизована с помощью функций-НЕЧЛЕНОВ класса.
Подучи матчасть - перегрузка БИНАРНЫХ операторов класса.
Re: .
Добавлено: 29 окт 2009, 18:19
Airhand
BBB
Я ошибся: не увидел, что в реализации нет спецификатора класса.
Re: Класс "комплексные числа"
Добавлено: 30 окт 2009, 10:36
Romeo
" писал(а):Ты, как всегда, ничего не понял
Как раз понял больше тебя, так как ты сам признался, что ошибся:
" писал(а):Я ошибся: не увидел, что в реализации нет спецификатора класса.
Если бы ты всегда признавал свои ошибки, то таких ожесточённых споров бы не возникало.
Re: Класс "комплексные числа"
Добавлено: 30 окт 2009, 11:10
Airhand
Romeo писал(а):Если бы ты всегда признавал свои ошибки, то таких ожесточённых споров бы не возникало.
Если бы вы с
BBB признавали свои ошибки, то ...
А так я говорю
Ты сказал дословно:
"Если уберешь, ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
То есть в реализации класса недоступна секция private. ", а он отвечает "Если для тебя слова "реализация этих операторов" (которые в том случае НЕ ЯВЛЯЮТСЯ членами класса) эквивалентны словам "реализация класса", то это твои проблемы."
Как будто "реализация этих операторов" не может быть и там и там (и в классе и внешняя). Что он признал свою ошибку ?
.
Добавлено: 30 окт 2009, 12:07
BBB
Airhand писал(а):А так я говорю Как будто "реализация этих операторов" не может быть и там и там (и в классе и внешняя).
В общем случае МОЖЕТ БЫТЬ - и там, и там (и я об этом минимум два раза упоминал). А в ДАННОМ КОНКРЕТНОМ - в коде, представленном Dragon-ом - во вполне определенном.
В результате получилось, что ты чего-то
"не увидел" (<- твои слова), и начинаешь рассуждать и давать советы, исходя из ложной посылки.
Вот и получается, что Romeo прав в том, что ты читаешь написанное "по диагонали".
Re: .
Добавлено: 30 окт 2009, 13:04
Airhand
BBB писал(а):В общем случае МОЖЕТ БЫТЬ - и там, и там (и я об этом минимум два раза упоминал).
Нихрена ты не упоминал, я специально посмотрел. О том, что операторы - внешние есть одно упоминание, а о том что "реализация этих операторов" может быть как внешняя, так и внутреняя - ни разу.