Какой вариант правильный: 1. private - разрешает доступ к закрытым данным _объекта_ только методам _этого_ объекта; 2. private - разрешает доступ к закрытым данным _объекта_ только методам _любых_ объектов данного _класса_; Ы?
Booster Rockphorr как можно обойти эту privacy не выходя за рамки С++? т.е. например через сложные конструкции наследования, копирования, аггрегации и т.п.
Booster т.е. по факту получается, что это не защита данных, а защита объекта от разрушения из-за неправильного использования интерфейса посредством контроля типа объекта. так что ли?
NeuronViking да это не защита данных. возникает вопрос, а зачем? вообще объявить такой же класс, но с пабликами, и привести указатель на тот класс к новому типу, должно работать в большинстве случаев. Ну и конечно можно тупо по указателю, со смещениями. С функциями-членами, а что с ними, надо получить указатель, да вызывать, но первый параметр ( неявный ) должен быть указатель на объект.
NeuronViking >как можно обойти эту privacy не выходя за рамки С++? т.е. например через сложные конструкции наследования, копирования, аггрегации и т.п. Можно наследованием.
Я или на баше, или на говнокоде, или где в нормальном форуме читал про то, как чувак сетовал на то, что кто-то, чтобы юзать прайвит функции делал #define private public перед включениями =) Ну а вообще нужно понимать, что прайвит-паблик -- это заморочки компилятора, т.е. ты из метода класса можешь без проблем байндить приватные функции в функторы и т.д. =) Ну ты всегда можешь поменять код класса так, чтобы прайвит стал пабликом, так что проблема, видимо, в недопонимании с++ =)
Booster хмм, а разве производный класс не является _другим_ типом? где же тогда защита на уровне типов? и хотелось бы посмотреть пример где обходится private...
NeuronViking и вообще раз уж задача ставиться как получить доступ, почему не творить черные дела из наследуемого класса? в конструкторе например.
NeuronViking Защита на уровне объектов не очень и нужна. Когда пишешь класс, то понимаешь что делаешь, когда предоставляешь интерфейс другому коду, то защита работает. Защита от приведений, защита от не грамотно написанного кода, это совершенно другая история и С++ изначально предоставлял механизмы помощи, а не против кривых рук. Зачем?
Booster для общего развития =) интересно посмотреть как в рамках С++ может быть осуществлен доступ к приватным данным через наследования. сдается мне, что все же никак
Booster у меня самого пока еще путаница в голове. пытаюсь четко разобраться с концепцией С++. как оказалось, наследование не дает возможности залезть в приватные данные... такое возможно _только_ из объекта точно такого же типа и из статик функций.