The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Newsgroups: fido7.ru.cpp
From: Alex Besogonov <al...@izh.com>
Date: Fri, 18 Mar 2005 10:00:33 +0000 (UTC)
Local: Fri, Mar 18 2005 5:00 am
Subject: Re: Код на С и С++
Eugeny Dzhurinsky пишет:
> >> то есть на С++ он будет так же ужасно выглядеть как и на С? struct SomeObj > AB> С точностью до синтаксиса. > убицца веником.... > class SomeObj > { > public: > virtual void acceptVisitor( Visitor *visitor) = 0; > } { void (*acceptVisitor)(SomeObj *pThis, struct Visitor *visitor); }; typedef SomeObj SomeObjA; > class SomeObjA : protected SomeObj > { > public: > virtual void acceptVisitor( Visitor *visitor) { visitor->visit(this); } > } void someObjA_construct(SomeObjA *pThis) } void someObjA_acceptVisitor(SomeObjA *pThis, Visitor *visitor) { visitor_Visit(visitor,pThis); } Точно так же как SomeObjA; > class SomeObjB : protected SomeObj > { > public: > virtual void acceptVisitor( Visitor *visitor) { visitor->visit(this); } > } > class Visitor struct Visitor > { > public: > virtual void visit(SomeObj *target) = 0; > } { void (*visit)(Visitor *pThis,SomeObj *target); }; void VisitorA_construct(VisitorA *pThis) > class VisitorA: protected Visitor > { > public: > virtual void visit(SomeObj *target); > } { pThis->visitor=VisitorA_visit; } void VisitorA_visit(VisitorA *pThis, SomeObj *target) { //Blah-blah } Так же. > class VisitorB: protected Visitor > { > public: > virtual void visit(SomeObj *target); > } > ну и смоделируйте мне это все на Ц, если не затруднит. Коллекции взять из какой-нибудь библиотеки типа Glib: > using std::list; > typedef iter std::list<*SomeObj> somelist; > somelist collection; > VisitorA visit1; > VisitorB visit2; > for (somelist::iterator it = collection.begin(); > it != collection.end(); > it++) > { > it->acceptVisitor(&visit1); > it->acceptVisitor(&visit2); > } ========================= VisitorA visit1; VisitorA_construct(&visit1); VisitorB visit2; VisitorB_construct(&visit2); size_t f; for(f=0;f<list_size(collection);f++) { SomeObj *curElem=list_get_elem(f); curElem->acceptVisistor(curElem,&visit1); curElem->acceptVisistor(curElem,&visit2); } ========================= Получается в точности то же самое, но с другим синтаксисом. > AB> Без них вполне можно обойтись. Тем более, что они достатчоно просто Перегрузка операторов - просто синтаксический сахар, она прекрасно > AB> (кроме исключений) выражаются на С. > ой, покажите мне простую наколенную реализацию множественного наследования в Ц, > а также перегрузку опереторов и позднее связывание. выражается с помощью обычных операций. Позднее связывание - таблицы функций. MH (невиртуальный) тоже делается без проблем. -- You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
| ||||||||||||||