Страница 1 из 1

Перегрузка операторов и доступ к закрытым членам

Добавлено: 22 мар 2011, 00:00
Alecs
Поясните, пожалуйста, почему, когда при перегрузке операторов, если как аргумент передается ссылка на объект класса, то через эту ссылку мы имеем доступ к закрытым членам этого класса? Насколько я понял, закрытые данные не будут доступны через объект класса, а тут мы получаем к ним доступ.
Пример из книги Дейтелов

class Array
{
public:
[INDENT]Array(int = 10);
Array(Array &); //copy constructor
~Array();
int GetSize() const;
Array& operator=(const Array&);[/INDENT]

private:
[INDENT]int size;
int *ptr;
static int arrayCount;[/INDENT]
};

Вот реализация оператора =
Array &Array: :o perator =(const Array & ar)
{
if(&ar != this)
{
[INDENT]if(size!=ar.size)
{
[INDENT]delete [] ptr;
size = ar.size;
ptr = new int[size];[/INDENT]
}

for(int i=0; i<size; i++)
[INDENT]ptr= ar.ptr;[/INDENT]
}[/INDENT]

return *this;
}

Мы получаем доступ к закрытым данным. Почему? Данные ж закрыты. Не понимаю этого :(

Re: Перегрузка операторов и доступ к закрытым членам

Добавлено: 22 мар 2011, 09:33
BBB
Закрытые члены класса доступны из методов этого класса. Даже если речь идет о членах другого экземпляра этого класса, а не обращении к членам того экземпляра, для которого вызван данный метод.

В вашем примере: ar - это экземпляр класса Array, поэтому к любым его членам возможен доступ из любого метода класса Array.

Re: Перегрузка операторов и доступ к закрытым членам

Добавлено: 22 мар 2011, 15:50
Alecs
Спасибо большое =)