![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Всем известно, что h/hpp это интерфейсные файлы, содержащие ровно столько, сколько должен знать о ней пользователь библиотеки для ее использования.
Вроде не приложная истина, однако при написании класса, я не могу разделить декларацию класса ! Т.е. public в инклуде, а protected и private в реализации, т.е. в cpp-файле. Раз нельзя, значит приходится с этим мириться или искать другие способы преодоления этого ограничения, чем я и занялся. Пояснив одному из знатоков у себя на работе услышал страшное слово "pimpl", как понял это необходимо создать класс дополнительный указать его в закрытых частях, а реализацию в конструкторе, т.е. new и в деструкторе delete и др. Но такая ситуция характерна для случаев только при кросс-платформенных проектов, когда хочется все сделать в едином стиле, а конкретику свести к некоторым классам. Мне кажется, пока не могу четко сформулировать почему, эта идиома не совсем подходит, но тогда что вообще можно применить ? |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Реализация класс это работа творческая, но посути ты имееш право открыть только паблик а то что не хочеш открывать делай реализацию 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(); } Это не идеальный код(напротив дажет, просто не хотелось заморачиваться), но зато думаю понятна суть! |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
секции нужны не для (визуального) сокрытия кода, а для контроля (компилятором) доступа. нет, просто на примере крос. проектов хорошо демонстрируются преимущества. и эту идеому (см паттерн bridge, частным случаем которй является pimpl) тоже, если для Вашего проекта она не является избыточной. Можно просто выделить абстрактные классы. А может вобще ничего это не нужно - все зависит от проекта. Это сообщение отредактировал(а) mes - 19.1.2009, 12:13 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |