Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 11.04.2012, 22:24   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: private

По стандарту приватный член инкапсулирован в контексте класса. Объект может прямую доставать поля других объектов того же класса, такие дела.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (11.04.2012)
Старый 11.04.2012, 22:32   #3
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: private

Я блуждал в темноте?
да.
private закрывает доступ к полям для всех кроме класса-владельца. не экземпляра
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (11.04.2012)
Старый 11.04.2012, 22:48   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: private

Перечитал текст лекции, рассказанной студентам в прошлом году - там всё правильно (как Knightmare написал). Фух - значит помутнение какое-то у меня.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 12.04.2012, 11:44   #5
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: private

Сообщение от Knightmare Посмотреть сообщение
По стандарту приватный член инкапсулирован в контексте класса. Объект может прямую доставать поля других объектов того же класса, такие дела.
ну и как после такого можно говорит что Бъярне дружит с головой???
зачем инкапсуляция ваще? для того, чтобы никто кроме экземпляра класса (объекта) не лез к нему внутрь, а доступ к внутренним данным получал только через геттеры.
походу было так: бъярне не понял нихера и сделал как получилось.
минутка негодования закончена.
(Offline)
 
Ответить с цитированием
Старый 12.04.2012, 12:15   #6
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: private

ну и как после такого можно говорит что Бъярне дружит с головой???
зачем инкапсуляция ваще? для того, чтобы никто кроме экземпляра класса (объекта) не лез к нему внутрь, а доступ к внутренним данным получал только через геттеры.
походу было так: бъярне не понял нихера и сделал как получилось.
минутка негодования закончена.
Мне похуй. Но ты можешь не писать на плюсах, чо.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (16.04.2012)
Старый 14.04.2012, 01:52   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: private

На самом деле, всё можно логично обосновать:
Твой класс - твои правила. В плане: никто кроме разработчика библиотеки не должен писать методы класса. Все остальные взаимодействующие объекты (сторонние библиотеки) как раз будут довольствоваться паблик-интерфейсом.
Для того чтобы "следить за собой" можно воспользоваться другими инструментами языка: выделять часть данных в структуры, имеющие свой интерфейс, использовать перегрузку операторов и перечисляемые типы, спецификаторы const, mutable и т.п.
На худой конец - использовать возможности стат.анализаторов.
В любом случае - от ошибки никто не застрахован
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
HolyDel (14.04.2012), moka (14.04.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:15.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com