Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > private-часть в декларации класса |
Автор: EvilsInterrupt 18.1.2009, 15:27 |
Всем известно, что h/hpp это интерфейсные файлы, содержащие ровно столько, сколько должен знать о ней пользователь библиотеки для ее использования. Вроде не приложная истина, однако при написании класса, я не могу разделить декларацию класса ! Т.е. public в инклуде, а protected и private в реализации, т.е. в cpp-файле. Раз нельзя, значит приходится с этим мириться или искать другие способы преодоления этого ограничения, чем я и занялся. Пояснив одному из знатоков у себя на работе услышал страшное слово "pimpl", как понял это необходимо создать класс дополнительный указать его в закрытых частях, а реализацию в конструкторе, т.е. new и в деструкторе delete и др. Но такая ситуция характерна для случаев только при кросс-платформенных проектов, когда хочется все сделать в едином стиле, а конкретику свести к некоторым классам. Мне кажется, пока не могу четко сформулировать почему, эта идиома не совсем подходит, но тогда что вообще можно применить ? |
Автор: Lycifer 18.1.2009, 16:42 |
Реализация класс это работа творческая, но посути ты имееш право открыть только паблик а то что не хочеш открывать делай реализацию cpp(с) файле. ТО и есть делай через несколько классов. P.S. Приватные поля это условное соображение , так как мы всегда можем получить память объекта. Ну а если все таки хочется закрыть, то тогда стоит делать какое ни будь связывание во время выполнения. Пример? //закрытый класс, о котором не знает пользователь /.h class A { public: void PrintHelloWord(); }; //.h lkz gjkmpjdfntkz class B { private: A* Get(); public: void PrintHelloWord(); }; //.cpp void A::PrintHelloWord() { std::cout<<"Hello Word"<<std::endl; } //.cpp A* ptr = new A; A* B::Get() { return ptr; } void B::PrintHelloWord() { ptr->PrintHelloWord(); } Это не идеальный код(напротив дажет, просто не хотелось заморачиваться), но зато думаю понятна суть! |