Класс "комплексные числа"

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB писал(а): Прочитал его несколько раз, но так и не понял, о чем в нем говорится.
Что тут растолковывать ? После перегрузки опраторы класса стают как бы "внешними", а "внешние" функции не имеют доступа к private-членам класса. Именно поэтому они и определены как friend. Можно сделать изврат: объявить по паре паблик-функций для каждого приватного или защищённого члена-данных класса Set/Get. Я знаю, что это - изврат, зато избавимся от friend.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):В реализации он и так доберётся до членов private: внутри класса есть доступ ко всем членам
Ты как обычно доминируешь. Похоже, о внешних и внутренних операторах ты не слышал.
&quot писал(а):После перегрузки опраторы класса стают как бы "внешними", а "внешние" функции не имеют доступа к private-членам класса
После перегрузки они "стают" (copyright Airhand) внешними? А до перегрузки, соответственно они внутренними были?

Если это операторы КЛАССА, то это всегда операторы с внутренней декларацией. Если операторы внешние, то они не являются операторами КЛАССА. У нас здесь пример как раз внешних операторов.

Научись правильно излагать свои мысли. Твои посты неприятно читать, поскольку они написаны неграмотно, как с точки зрения русского языка, так и с технической точки зрения.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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;
}
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а):Научись правильно излагать свои мысли. Твои посты неприятно читать, поскольку они написаны неграмотно, как с точки зрения русского языка, так и с технической точки зрения.
Ты, как всегда, ничего не понял и давай меня грязью поливать.
BBB писал(а):А это я не то же самое написал по сути?
Ты сказал дословно:
Если уберешь, ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
То есть в реализации класса недоступна секция private.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand писал(а):Ты сказал дословно:
Если уберешь, ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
То есть в реализации класса недоступна секция private.
Если для тебя слова "реализация этих операторов" (которые в том случае НЕ ЯВЛЯЮТСЯ членами класса) эквивалентны словам "реализация класса", то это твои проблемы. Точнее, проблемы того, что ты плаваешь в теории (половину знаю, а половину не понял). Т.к. (еще раз повторю) у Dragon-а перегрузку бинарных операторов была релизована с помощью функций-НЕЧЛЕНОВ класса.

Подучи матчасть - перегрузка БИНАРНЫХ операторов класса.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB
Я ошибся: не увидел, что в реализации нет спецификатора класса.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Ты, как всегда, ничего не понял
Как раз понял больше тебя, так как ты сам признался, что ошибся:
&quot писал(а):Я ошибся: не увидел, что в реализации нет спецификатора класса.
Если бы ты всегда признавал свои ошибки, то таких ожесточённых споров бы не возникало.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а):Если бы ты всегда признавал свои ошибки, то таких ожесточённых споров бы не возникало.
Если бы вы с BBB признавали свои ошибки, то ...
А так я говорю
Ты сказал дословно:
"Если уберешь, ты в реализации этих операторов не сможешь доступиться к private-полям класса (real и imagine).
То есть в реализации класса недоступна секция private. ", а он отвечает "Если для тебя слова "реализация этих операторов" (которые в том случае НЕ ЯВЛЯЮТСЯ членами класса) эквивалентны словам "реализация класса", то это твои проблемы."
Как будто "реализация этих операторов" не может быть и там и там (и в классе и внешняя). Что он признал свою ошибку ?
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand писал(а):А так я говорю Как будто "реализация этих операторов" не может быть и там и там (и в классе и внешняя).
В общем случае МОЖЕТ БЫТЬ - и там, и там (и я об этом минимум два раза упоминал). А в ДАННОМ КОНКРЕТНОМ - в коде, представленном Dragon-ом - во вполне определенном.
В результате получилось, что ты чего-то "не увидел" (<- твои слова), и начинаешь рассуждать и давать советы, исходя из ложной посылки.
Вот и получается, что Romeo прав в том, что ты читаешь написанное "по диагонали".
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB писал(а):В общем случае МОЖЕТ БЫТЬ - и там, и там (и я об этом минимум два раза упоминал).

Нихрена ты не упоминал, я специально посмотрел. О том, что операторы - внешние есть одно упоминание, а о том что "реализация этих операторов" может быть как внешняя, так и внутреняя - ни разу.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Ответить