|
11.04.2012, 22:24
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
private
Я всегда считал, что private закрывает доступ к полям для всех кроме экземпляра-владельца. Однако сейчас заметил, что данный код на GCC указывает всего на одну ошибку.
#include <conio.h>
#include <iostream>
using namespace std;
class foo{
private:
int bar;
public:
bool check(const foo &baz)const;
};
inline bool foo::check(const foo &baz)const{
return (this->bar==baz.bar);
}
int main()
{
foo a;
a.bar=1;
getch ();
return 0;
}
Как жить? Я блуждал в темноте? По приведённому выше коду можно утверждать, что private закрывает поля лишь для других классов и функций (если только те не дружественные).
В Бьерн Страуструп Язык программирования C++. Специальное издание. Пер. с англ. — М.: Издательство Бином, 2011 г. — 1136 с: ил. формулировка, не противоречащая ни первому варианту, ни второму.
Пользователи студии отпишитесь, пожалуйста!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
11.04.2012, 22:31
|
#2
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: private
По стандарту приватный член инкапсулирован в контексте класса. Объект может прямую доставать поля других объектов того же класса, такие дела.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.04.2012, 22:32
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: private
да.
private закрывает доступ к полям для всех кроме класса-владельца. не экземпляра
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.04.2012, 22:48
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: private
Перечитал текст лекции, рассказанной студентам в прошлом году - там всё правильно (как Knightmare написал). Фух - значит помутнение какое-то у меня.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
12.04.2012, 11:44
|
#5
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: private
Сообщение от Knightmare
По стандарту приватный член инкапсулирован в контексте класса. Объект может прямую доставать поля других объектов того же класса, такие дела.
|
ну и как после такого можно говорит что Бъярне дружит с головой???
зачем инкапсуляция ваще? для того, чтобы никто кроме экземпляра класса (объекта) не лез к нему внутрь, а доступ к внутренним данным получал только через геттеры.
походу было так: бъярне не понял нихера и сделал как получилось.
минутка негодования закончена.
|
(Offline)
|
|
12.04.2012, 12:15
|
#6
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: private
ну и как после такого можно говорит что Бъярне дружит с головой???
зачем инкапсуляция ваще? для того, чтобы никто кроме экземпляра класса (объекта) не лез к нему внутрь, а доступ к внутренним данным получал только через геттеры.
походу было так: бъярне не понял нихера и сделал как получилось.
минутка негодования закончена.
|
Мне похуй. Но ты можешь не писать на плюсах, чо.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.04.2012, 01:52
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: private
На самом деле, всё можно логично обосновать:
Твой класс - твои правила. В плане: никто кроме разработчика библиотеки не должен писать методы класса. Все остальные взаимодействующие объекты (сторонние библиотеки) как раз будут довольствоваться паблик-интерфейсом.
Для того чтобы "следить за собой" можно воспользоваться другими инструментами языка: выделять часть данных в структуры, имеющие свой интерфейс, использовать перегрузку операторов и перечисляемые типы, спецификаторы const, mutable и т.п.
На худой конец - использовать возможности стат.анализаторов.
В любом случае - от ошибки никто не застрахован
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:12.
|