| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > сделать невозможным присвоение |
| Автор: Alek86 21.2.2008, 11:18 |
| задачка не из жизни, просто интересно, какое лучшее решение придумают: сделать такой класс, объекты которого нельзя присваивать друг другу нигде в программе (важная часть задачи - даже в функциях-членах самого этого класса). По возможности, чтобы при попытке присвоения получалась ошибка, по которой легко догадаться о ее причине. |
| Автор: marcusmae 21.2.2008, 11:38 |
| Константный объект? |
| Автор: SABROG 21.2.2008, 11:46 |
| Если константный способ не подходит, то можно воспользоваться правилом хорошего тона при разработке классов и доступ к переменным предоставлять через публичные методы setVariable()/getVariable(), а там уже хоть "#error Обшибко, низзя так делать!" |
| Автор: SABROG 21.2.2008, 11:54 |
| Перегрузи оператор = в классе и делай что хочешь. |
| Автор: Mayk 21.2.2008, 12:02 | ||
Добавлено через 23 секунды Задача емнип решена в boost.non_copyable |
| Автор: Alek86 21.2.2008, 12:10 |
делаю я и так, что хочу почти, но в условии задачи была оговорка (нужно было ее жирным выделить) о том, чтобы в классе тоже нельзя было присваивать да, это оно, кажется. надо почаще в буст заглядывать - ато я для решения задачи с шаблонами мучился.... |
| Автор: xvr 21.2.2008, 12:43 | ||||
Так оно и будет, если не сделать реализации оператора присваивания. Вот только ошибка будет не compile а link time
|
| Автор: Alek86 21.2.2008, 12:56 |
для разработки библиотеки (да и любого класса, который будут другие пользовать) link time не подходит - потому не считается |
| Автор: Dimonius 21.2.2008, 18:10 |
| А не о синглтоне ли здесь речь? |
| Автор: Alek86 21.2.2008, 18:28 |
| нет Единый эелемент отличается от Некопируемого |
| Автор: Dimonius 21.2.2008, 18:39 |
ок, сорри за флейм в решенной теме |
| Автор: Alek86 21.2.2008, 18:44 | ||
не оно
|
| Автор: georain 23.2.2008, 01:05 | ||||
Чтобы предотвратить копирование объектов HomeForSale, нужно лишь унаследовать его от Uncopyable:
Effective C++ 3thEd правило 6 |
| Автор: xvr 23.2.2008, 08:49 | ||||||
От решения, реализованного в boost отличается только именем класса (и тем, что в boost'е это все еще дополнительно завернуто в 2 namespace'а) |
| Автор: Fazil6 23.2.2008, 10:23 |
| georain, в следующий раз, когда будешь из книги переписывать в форум, читай повнимательнее и перечитывай то, что написал |
| Автор: georain 23.2.2008, 16:10 |
| Извините, а что я не так сделал? |
| Автор: Fazil6 23.2.2008, 17:54 |
вопервых не сказал ничего нового, а во вторых, если даже после моего замечания прочтя свое сообщение ты не видишь ошибки, то можно прийти к выводу, что ты просто тупо переписал из книги слабо понимая, что именно означает, то что пишешь |
| Автор: georain 23.2.2008, 23:00 | ||
Укажите мне неграмотному, где ошибка, не вижу ошибки. |
| Автор: Lazin 23.2.2008, 23:38 | ||
georain, все дело вот в чем
конструктор и деструктор базового класса - защищенные и наследование закрытое - в результате нельзя создать объект класса HomeForSale, хотя возможна ситуация когда это то что нам надо |
| Автор: Fazil6 24.2.2008, 10:33 |
| 2Lazin вот уж точно - лучше молчать чем говорить... georain, почитай коменты свои |
| Автор: Daevaorn 24.2.2008, 12:16 |
| Прицепился к банальному typo и рад. Фе! |
| Автор: JackYF 24.2.2008, 12:18 |
| Люди, спокойно и без оскорблений, пожалуйста. |
| Автор: MAKCim 24.2.2008, 12:47 | ||
Fazil6,
|
| Автор: Lazin 24.2.2008, 13:33 |
| Да уж, я почему-то думал, что при закрытом наследовании в производном классе доступны только public методы а за минус спасибо, мой первый минус на форуме |