Здравствуйте!
Скажите, почему этот код работает?
Почему через точку я получаю доступ к закрытому члену данных, непосредственно когда я делаю это в другом объекте того же типа?
Это вообще правильно, обяъсните пожалуйста что тут происходит. Я вот думал доступ к закрытым членам можно получить только из члена — функции через указатель 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
Я может чего не до понимаю, направьте куда нужно.
Здравствуйте, dirtez, Вы писали:
D>Я может чего не до понимаю, направьте куда нужно.
вообрази себе класс с неким внутренним состоянием, которое не "засвечивается" наружу (т.е. нет ни каких публичных методов дающих к нему доступ).. сплошь и рядом вобщем такое бывает... а теперь попробуй реализовать конструктор копирования и оператор присваивания для этого класса предполагая что из любого метода можно иметь доступ только к this...

)
удачи!
Здравствуйте, 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 это области видимости для _класса_ а не для его экземпляра.