Доступ к приватным членам объекта из другого объекта с таким же классом

225
19 декабря 2016, 19:50

Возможно ли это? Вот пример :

fraction <T> fraction<T>::operator+(const fraction& b) const
{
    fraction newFrac(*this);
    fraction newB(b);
    newFrac.LCD_cast_both(newB);
    newFrac.integer += newB.integer;
    return newFrac;
}

будет ли это работать? Integer - приватный член типа T.

Answer 1

Будет*.

Вот объяснение из C++ FAQ:

В идентификаторе this нет ничего специального. Доступ даётся или не даётся в зависимости от класса объекта (или ссылки/указателя на него), вне зависимости от идентификатора, представляющего ссылку/указатель/объект.

[...]

Давайте рассмотрим оператор присваивания: Foo::operator=(Foo const& x). Этот оператор должен, скорее всего, изменить данные в объекте-приёмнике, *this, исходя из значений данных в объекте-источнике, x. В отсутствие правила C++, которое мы обсуждаем, единственная возможность для оператора получить доступ к закрытым полям x — это если бы класс Foo имел открытый get-метод для каждого закрытого поля! Это была бы полная хрень.

(перевод мой)

*при наличии правильного конструктора копирования у fraction<T>, конечно.

READ ALSO
Сниффер C++

Сниффер C++

Есть сниффер , ловит пакеты записывает заголовочную информацию в файлПрепод требует допустим если udp пакет записывал еще порты , icmp - тип icmp и код...

229
Как работает оператор &gt;&gt; в fstream?

Как работает оператор >> в fstream?

У меня есть небольшая программа, которая считает слова, я знаю как она работает, но не совсем понимаю как именно устроен механизмКонкретно...

238
1 error C2143: синтаксическая ошибка: отсутствие &ldquo;;&rdquo;

1 error C2143: синтаксическая ошибка: отсутствие “;”

Написала код программы для этой задачи,а она выдает ошибку,подскажите что не такИ не прописала два последних условия- E-сбит ровно один истребитель,F-сбит...

168
Crypto API: Подписать данные сертификатом

Crypto API: Подписать данные сертификатом

Есть Crypto API, есть сертификат, есть данныеНеобходимо получить подпись

221