Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
Message from discussion Код на С и С++
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
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Alex Besogonov  
View profile   Translate to Translated (View Original)
 More options Mar 18 2005, 5:00 am
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 пишет:
>  >> то есть на С++ он будет так же ужасно выглядеть как и на С?
>  AB> С точностью до синтаксиса.
> убицца веником....
> class SomeObj
> {
> public:
>     virtual void acceptVisitor( Visitor *visitor) = 0;
> }

struct SomeObj
{
        void (*acceptVisitor)(SomeObj *pThis, struct Visitor *visitor);

};
> class SomeObjA : protected SomeObj
> {
> public:
>     virtual void acceptVisitor( Visitor *visitor) { visitor->visit(this); }
> }

typedef SomeObj SomeObjA;

void someObjA_construct(SomeObjA *pThis)
{
        pThis->acceptVisitor=&someObjA_acceptVisitor;

}

void someObjA_acceptVisitor(SomeObjA *pThis, Visitor *visitor)
{
        visitor_Visit(visitor,pThis);

}
> class SomeObjB : protected SomeObj
> {
> public:
>     virtual void acceptVisitor( Visitor *visitor) { visitor->visit(this); }
> }

Точно так же как SomeObjA;

> class Visitor
> {
> public:
>     virtual void visit(SomeObj *target) = 0;
> }

struct Visitor
{
        void (*visit)(Visitor *pThis,SomeObj *target);

};
> class VisitorA: protected Visitor
> {
> public:
>     virtual void visit(SomeObj *target);
> }

void VisitorA_construct(VisitorA *pThis)
{
        pThis->visitor=VisitorA_visit;
}

void VisitorA_visit(VisitorA *pThis, SomeObj *target)
{
        //Blah-blah    

}
> class VisitorB: protected Visitor
> {
> public:
>     virtual void visit(SomeObj *target);
> }

Так же.

> ну и смоделируйте мне это все на Ц, если не затруднит.
> 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);
> }

Коллекции взять из какой-нибудь библиотеки типа Glib:
=========================
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 (невиртуальный) тоже делается без проблем.

--
С уважением,
             Alex Besogonov (al...@izh.com)


 
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.