Мы можем получить доступ к закрытым переменным другого класса, когда определяем конструкторы копирования или перемещения. С ++ делает их friend
друг другу автоматически?
Например:
my_str::my_str(my_str&& m)
{
size_ = m.size_; //accessing private variable another my_str class
buff_ = m.buff_; //accessing private variable another my_str class
m.buff_ = nullptr;
m.size_ = 0;
}
c++
friend-class
redkont
источник
источник
Ответы:
Это не считается другом, но да, любая функция-член класса
my_str
может получить доступ к закрытым членам всех экземпляров типаmy_str
, а не толькоthis
экземпляра:Общая идея заключается в том, чтобы позволить двум или более объектам одного и того же типа взаимодействовать без необходимости выставлять свои закрытые члены.
источник
Функции-члены самого класса всегда имеют доступ к
private
членам, независимо от того, определена ли функция-член в классе или вне класса, и не важно, является ли она специальной функцией-членом, такой как конструктор копирования / перемещения.Поэтому они не
friend
из класса, потому что это не имеет никакого смысла. Они уже являются частью класса. Тем не менее, они имеют доступ ко всемprivate
членам не потому, что ониfriend
, а потому, что они являются частью класса.Если бы не было возможности инициализировать элементы в конструкторе (потому что они недоступны), тогда вся концепция доступности элементов была бы бессмысленной. (Как бы вы инициализировали участника?)
Кроме того, доступность никоим образом не зависит от объекта, к которому обращаются члены. Доступность зависит только от того, где в коде используется имя (имя члена). Если функция может получить доступ к члену одного экземпляра класса, то она также может получить доступ к члену другого экземпляра того же класса.
источник