Доступ к закрытым членам объекта
От: dirtez  
Дата: 23.02.12 22:06
Оценка:
Здравствуйте!

Скажите, почему этот код работает?
Почему через точку я получаю доступ к закрытому члену данных, непосредственно когда я делаю это в другом объекте того же типа?
Это вообще правильно, обяъсните пожалуйста что тут происходит. Я вот думал доступ к закрытым членам можно получить только из члена — функции через указатель this, а тут на те ...
class SimpleClass {
private:
    int val;
public:
    SimpleClass(int i) { val = i; }
    void show_val(SimpleClass &ob) {
        cout << ob.val << endl;     // почему доступно?
        SimpleClass ob1;
        cout << ob1.val << endl;    // почему доступно?
    }
}
...
SimpleClass ob1(100);
SimpleClass ob2(200);
ob.show_val(ob2);     // 200

Я может чего не до понимаю, направьте куда нужно.
c++
Re: Доступ к закрытым членам объекта
От: Vamp Россия  
Дата: 23.02.12 22:10
Оценка:
D>Почему через точку я получаю доступ к закрытому члену данных, непосредственно когда я делаю это в другом объекте того же типа?
А что тебя удивляет? Функция show_val есть функция-член класса SimpleClass, по определению она имеет доступ ко всем его членам, независимо от объекта.
Да здравствует мыло душистое и веревка пушистая.
Re: Доступ к закрытым членам объекта
От: zaufi Земля  
Дата: 23.02.12 22:23
Оценка:
Здравствуйте, dirtez, Вы писали:

D>Я может чего не до понимаю, направьте куда нужно.


вообрази себе класс с неким внутренним состоянием, которое не "засвечивается" наружу (т.е. нет ни каких публичных методов дающих к нему доступ).. сплошь и рядом вобщем такое бывает... а теперь попробуй реализовать конструктор копирования и оператор присваивания для этого класса предполагая что из любого метода можно иметь доступ только к this... )

удачи!
Re: Доступ к закрытым членам объекта
От: RSATom Россия  
Дата: 24.02.12 02:29
Оценка: 3 (1) +1
Здравствуйте, dirtez, Вы писали:

D>Здравствуйте!


D>Скажите, почему этот код работает?

D>Почему через точку я получаю доступ к закрытому члену данных, непосредственно когда я делаю это в другом объекте того же типа?
D>Это вообще правильно, обяъсните пожалуйста что тут происходит. Я вот думал доступ к закрытым членам можно получить только из члена — функции через указатель this, а тут на те ...
D>
D>class SimpleClass {
D>private:
D>    int val;
D>public:
D>    SimpleClass(int i) { val = i; }
D>    void show_val(SimpleClass &ob) {
D>        cout << ob.val << endl;     // почему доступно?
D>        SimpleClass ob1;
D>        cout << ob1.val << endl;    // почему доступно?
D>    }
D>}
D>...
D>SimpleClass ob1(100);
D>SimpleClass ob2(200);
D>ob.show_val(ob2);     // 200
D>

D>Я может чего не до понимаю, направьте куда нужно.

Все очень просто, под "закрытостью" в С++ понимается закрытость для тех клиентов класса которые потенциально не умеют _правильно_ обращаться с некоторыми элементами класса. Сам же класс всегда понимает как работают его элементы, и значит всегда может правильно ими оперировать.

Ну или по другому: private/public/protected это области видимости для _класса_ а не для его экземпляра.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.