| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Механизм проверки соответствия классов |
| Автор: 46&two 19.4.2004, 10:07 |
| Такое дело: Есть множество классов, реализующих объекты разных предметных областей. Все классы являются потомками некоторого класса. У каждого из объектов есть список подобъектов-наследников базового класса, т.е. он может быть контейнером объектов некоторых классов. Нужно: Реализовать механизм проверки: может ли объект класса А находиться в списке подобъектов класса В. При этом введение нового класса (который может как содержать в себе объекты других классов, так и находиться в списке объектов других классов) не должно подразумевать внесение изменений в уже существующие классы. Вот такая ботва. Есть мысли? |
| Автор: bel_nikita 19.4.2004, 14:46 | ||
Че-та я не допонял. Это наверное должно быть все в динамике, но вот мысля такая есть в статике:
|
| Автор: achmed 19.4.2004, 18:07 |
| хитро! но это не даст ответ на вопрос является ли данный класс потомком заданого. можно посмотреть как это сделанр в MFC, например, а вообще это метапрограммирование |
| Автор: Nastya 20.4.2004, 08:46 |
| Смотря в чем пишешь, если в чистом С++, то там механизм RTTI не реализован. А реализовывать его не так просто . Тут на форуме была тема как это реализовано в MFC (при помощи статических переменных и макросов) весьма ценная статейка была. |
| Автор: gray_k 20.4.2004, 09:32 |
| Чего-то я тоже непонял. Надо проверить является ли один класс потомком другого? Для этого dynamic_cast можно использовать. |
| Автор: 46&two 20.4.2004, 10:02 |
| нет. смысл не в том, чтобы понять, является ли класс А потомком класса В. По большому счету, все классы в описанной задаче являются потомками одного-единственного класса (пусть будет BaseClass) Как я уже сказал, у каждого из этого множества классов есть список типа: list <BaseClass> myChildrenList; вот. Но проблема в том, что для каждого конкретного класса в этом списке могут быть экземпляры ТОЛЬКО НЕКОТОРЫХ ИЗ множества классов-потомков BaseClass. Например, есть классы A, B, C. Все они потомки BaseClass (они могут быть и непрямыми потомками, между ними могут быть отношения наследования - не суть важно). В списке myChildrenList класса A могут находиться экземпляры всех классов (A,B,C, BaseClass) У экземпляров класса B в этом списке могут быть только экземпляры B и C, а экземпляры классов А и BaseClass быть не могут. А, например, у С в списке быть не может ничего. Так вот, нужно реализовать механизм который каким-либо образом определял бы, могут ли экземпляра класса i лежать в списке экземпляра класса j. Кроме того (самое важное в данной задаче): пусть мы добавили новый класс D, экземпляры которого, по замыслу, могут находиться в списках всех классов (A,B,C,D, BaseClass). Как это дело реализовать, НИЧЕГО НЕ МЕНЯЯ В УЖЕ СУЩЕСТВУЮЩИХ КЛАССАХ (А, B, C, BaseClass)???? Да и вообще, возможно ли подобное??? |
| Автор: sergejzr 20.4.2004, 12:11 |
| На этом форуме в FAQ интереснейшая информация: http://forum.vingrad.ru/index.php?showtopic=16751 |
| Автор: 46&two 20.4.2004, 15:43 |
| информация интересная, но, тем не менее, к данной задаче ни малейшего отношения не имеет. |
| Автор: mr.DUDA 20.4.2004, 17:29 | ||
Для проверки "является ли один класс производным от другого класса", можно и нужно использовать RTTI. Вот рабочий код, с примерами:
Добавлено @ 17:33 З.Ы. Этот вопрос подымается довольно часто, поэтому тема добавлена в FAQ по С++. |
| Автор: achmed 23.4.2004, 09:17 | ||
не понял ? какой такой чистый C++ без RTTI ? может вы путаете со старым стандартом ? |