Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Alecs12
1 / 1 / 0
Регистрация: 21.03.2011
Сообщений: 23
21.03.2011, 23:55     Перегрузка операторов и доступ к закрытым членам #1
Поясните, пожалуйста, почему, когда при перегрузке операторов, елис как аргумент передается ссылка на обьект класса, то через эту ссылку мы имеем досуп з закрытым членам этого класса? Насколько я понял, закрытые данные не будут доступны черезщ обьект класса, а тут мы получаем к ним доступ.
Пример из книги Дейтелов

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Array
{
public:
    Array(int = 10);
    Array(Array &); //copy constructor
    ~Array();
    int GetSize() const;
    Array& operator=(const Array&);
 
private:
    int size;
    int *ptr;
    static int arrayCount;
};
Вот реализация оператора =
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array &Array::operator =(const Array & ar)
{
    if(&ar != this)
    {
        if(size!=ar.size)
        {
            delete [] ptr;
            size = ar.size;
            ptr = new int[size];
        }
 
        for(int i=0; i<size; i++)
            ptr[i]= ar.ptr[i];
    }
 
    return *this;
}
Мы получаем досуп к закрытым данным. Почему? Данные ж закрыты. Не понимаю этого
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2011, 23:55     Перегрузка операторов и доступ к закрытым членам
Посмотрите здесь:

C++ Доступ к приватным членам
C++ Доступ к закрытым элементам класса - Вопрос
Доступ к private членам класса C++
C++ Доступ к закрытым членам базового класса
C++ доступ к private членам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.03.2011, 00:02     Перегрузка операторов и доступ к закрытым членам #2
Цитата Сообщение от Alecs12 Посмотреть сообщение
Мы получаем досуп к закрытым данным. Почему? Данные ж закрыты. Не понимаю этого
Передается объект того же типа.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.03.2011, 04:29     Перегрузка операторов и доступ к закрытым членам #3
Alecs12, Оператор присваивания объявлен в классе, а вне класса его определение. Поэтому мы и имеем доступ к закрытым данным. Функция является таким же членом класса, как и все остальное.
Alecs12
1 / 1 / 0
Регистрация: 21.03.2011
Сообщений: 23
22.03.2011, 15:49  [ТС]     Перегрузка операторов и доступ к закрытым членам #4
Ну меня смущало то, что мы имеем доступ к прайват части обьекта другого класса. который передается как аргумент в функцию.
Но, спасибо, я уже разобрался, что у нас будет доступ к прайват части любых обьектов этого класса, не только того, с которым сейчас работаем.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.03.2011, 16:46     Перегрузка операторов и доступ к закрытым членам #5
Alecs12, не путайте понятия "объект" и "класс". Класс - описание типа данных, объект - представитель (экземпляр) описанного типа (класса). Функции (функции-члены или методы) являются членами классов, а не объектов, в отличие от членов-данных, поэтому они имеют доступ к данным любого объекта данного класса.
Yandex
Объявления
22.03.2011, 16:46     Перегрузка операторов и доступ к закрытым членам
Ответ Создать тему
Опции темы

Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru