private в C++

Тема в разделе "WASM.HEAP", создана пользователем NeuronViking, 18 мар 2010.

  1. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Какой вариант правильный:

    1. private - разрешает доступ к закрытым данным _объекта_ только методам _этого_ объекта;
    2. private - разрешает доступ к закрытым данным _объекта_ только методам _любых_ объектов данного _класса_;

    Ы?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Любых объектов. То есть из одного объекта можно обратиться к приватным данным другого.
     
  3. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster
    это точно? определяется стандартом С++ или реализацией компилятора?
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    NeuronViking
    Защита действует на уровне типов, так что именно так и правильно.
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    Booster
    может и правильно, но как всегда в цэ не логично
     
  6. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster
    Rockphorr

    как можно обойти эту privacy не выходя за рамки С++? т.е. например через сложные конструкции наследования, копирования, аггрегации и т.п.
     
  7. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster
    т.е. по факту получается, что это не защита данных, а защита объекта от разрушения из-за неправильного использования интерфейса посредством контроля типа объекта. так что ли?
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    NeuronViking
    да это не защита данных.

    возникает вопрос, а зачем? вообще объявить такой же класс, но с пабликами, и привести указатель на тот класс к новому типу, должно работать в большинстве случаев. Ну и конечно можно тупо по указателю, со смещениями.
    С функциями-членами, а что с ними, надо получить указатель, да вызывать, но первый параметр ( неявный ) должен быть указатель на объект.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    NeuronViking
    >как можно обойти эту privacy не выходя за рамки С++? т.е. например через сложные конструкции наследования, копирования, аггрегации и т.п.
    Можно наследованием.
     
  10. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    точно, я не так понял вопрос
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Rockphorr

    ололо
     
  12. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Я или на баше, или на говнокоде, или где в нормальном форуме читал про то, как чувак сетовал на то, что кто-то, чтобы юзать прайвит функции делал

    #define private public

    перед включениями =)
    Ну а вообще нужно понимать, что прайвит-паблик -- это заморочки компилятора, т.е. ты из метода класса можешь без проблем байндить приватные функции в функторы и т.д. =) Ну ты всегда можешь поменять код класса так, чтобы прайвит стал пабликом, так что проблема, видимо, в недопонимании с++ =)
     
  13. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster
    хмм, а разве производный класс не является _другим_ типом? где же тогда защита на уровне типов?
    и хотелось бы посмотреть пример где обходится private...
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    NeuronViking
    приведение типов кто-то отменял?
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    NeuronViking
    и вообще раз уж задача ставиться как получить доступ, почему не творить черные дела из наследуемого класса? в конструкторе например.
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    NeuronViking
    Защита на уровне объектов не очень и нужна. Когда пишешь класс, то понимаешь что делаешь, когда предоставляешь интерфейс другому коду, то защита работает. Защита от приведений, защита от не грамотно написанного кода, это совершенно другая история и С++ изначально предоставлял механизмы помощи, а не против кривых рук.

    Зачем?
     
  17. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster

    для общего развития =) интересно посмотреть как в рамках С++ может быть осуществлен доступ к приватным данным через наследования. сдается мне, что все же никак ;)
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    NeuronViking
    Значит я не так понял.
     
  19. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster
    у меня самого пока еще путаница в голове. пытаюсь четко разобраться с концепцией С++. как оказалось, наследование не дает возможности залезть в приватные данные... такое возможно _только_ из объекта точно такого же типа и из статик функций.
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    NeuronViking
    При чём здесь статик?