comp.lang.ada
 help / color / mirror / Atom feed
From: Hyman Rosen <hyrosen@mail.com>
Subject: Re: abstract sub programs overriding
Date: Tue, 09 Mar 2004 10:14:45 -0500
Date: 2004-03-09T10:14:45-05:00	[thread overview]
Message-ID: <1078845298.702789@master.nyc.kbcfp.com> (raw)
In-Reply-To: <5cmr40t76va200betf07b7bd6er05ltto9@4ax.com>

Dmitry A. Kazakov wrote:
> The problem is that to construct an object (A) /= to construct the
> dispatching table of its methods (B).

If a constructor is able to call member functions, some choice must
be made as to where dispatching calls will go.

> C++ choice is very close to: A implies B.

Yes.

> Obviously it is a bad choice from many points of view.

It's obviously a good choice from my point of view.

> One of them is safety, as the case shows.

As I said, if calls to member functions are to be permitted,
as they are in C++, Java, and Ada, it must be decided what
happens in the case of dispatching. The C++ approach is the
safest, because when a method is actually reached, it sees
only properly initialized data for its type. If code does
happen to attempt to dispatch to an abstract method, the
result is formally undefined, but in practice implementations
dispatch to a stub function which aborts the program, and thus
the error is detected at the point where it happens.

> True, but in practice it is difficult to view object construction /
> destruction as monolitic or error free.

In C++ construction is neither monolithic nor required to be error-free,
in the sense that any constructor may throw an exception to abort the
creation of an object.


> I think that probably two stage construction is needed.
 > The first one for type specific construction, the second for class-wide
 > one (at least to have dispatching in constructors)

Constructors can always pass arguments up the hierarchy in C++,
so ultimate type information is available if needed. If you want
to require the ultimate class to provide this data with no chance
of forgetting, simply inherit from a virtual base class without a
default constructor.

struct RepositoryOfFinalTypeInformation
{
     int magic_type_code;
     RepositoryOfFinalTypeInformation(int code) : magic_type_code(code) { }
};

struct A : virtual RepositoryOfFinalTypeInformation
{
     A() : RepositoryOfFinalTypeInformation(1)
     {
         if (magic_type_code == 1) /* ultimately A */;
         if (magic_type_code == 2) /* ultimately B */;
         if (magic_type_code == 3) /* ultimately C */;
     }
};

struct B : A
{
     B() : RepositoryOfFinalTypeInformation(2) { }
};

struct C : B { }; /* error - will not compile */
struct C : B
{
     C() : RepositoryOfFinalTypeInformation(3) { } /* Aah. That's better. */
};



  reply	other threads:[~2004-03-09 15:14 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-02 19:01 abstract sub programs overriding Evangelista Sami
2004-03-03  1:43 ` Stephen Leake
2004-03-05 15:02   ` Evangelista Sami
2004-03-05 16:15     ` Marius Amado Alves
2004-03-08 18:54       ` Adam Beneschan
2004-03-08 23:42         ` Marius Amado Alves
2004-03-05 16:26     ` Marius Amado Alves
2004-03-06  9:31       ` Simon Wright
2004-03-06 15:18         ` Evangelista Sami
2004-03-06 19:09           ` Marius Amado Alves
2004-03-07 12:35             ` Simon Wright
2004-03-07 13:39               ` Marius Amado Alves
2004-03-08 19:08               ` Adam Beneschan
2004-03-08 20:03                 ` Hyman Rosen
2004-03-09  8:51                   ` Dmitry A. Kazakov
2004-03-09 13:34                     ` Hyman Rosen
2004-03-09 14:49                       ` Dmitry A. Kazakov
2004-03-09 15:14                         ` Hyman Rosen [this message]
2004-03-09 15:56                           ` Dmitry A. Kazakov
2004-03-09 16:32                             ` Hyman Rosen
2004-03-10  9:32                               ` Dmitry A. Kazakov
2004-03-10 13:08                                 ` Hyman Rosen
2004-03-10 14:58                                   ` Robert I. Eachus
2004-03-10 16:00                                     ` Hyman Rosen
2004-03-10 18:07                                       ` Robert I. Eachus
2004-03-10 20:04                                         ` Hyman Rosen
2004-03-11  2:43                                           ` Robert I. Eachus
2004-03-11 13:55                                             ` Hyman Rosen
2004-03-12 23:02                                               ` Robert I. Eachus
2004-03-14 21:33                                                 ` Hyman Rosen
2004-03-15  5:59                                                   ` Robert I. Eachus
2004-03-15 14:39                                                     ` Hyman Rosen
2004-03-16 16:16                                                       ` Robert I. Eachus
2004-03-16 16:51                                                         ` Hyman Rosen
2004-03-16 19:54                                                         ` Hyman Rosen
2004-03-16 23:16                                                           ` Randy Brukardt
2004-03-17  1:54                                                           ` Robert I. Eachus
2004-03-16 23:14                                                         ` Randy Brukardt
2004-03-17  2:43                                                           ` Robert I. Eachus
2004-03-17 17:40                                                             ` Randy Brukardt
2004-03-18  2:39                                                               ` Robert I. Eachus
2004-03-18  5:57                                                                 ` Randy Brukardt
2004-03-18 15:03                                                                   ` Hyman Rosen
2004-03-18 20:32                                                                     ` Randy Brukardt
2004-03-19  3:59                                                                       ` Hyman Rosen
2004-03-19 19:37                                                                         ` Randy Brukardt
2004-03-16  6:00                                               ` Randy Brukardt
2004-03-11 10:09                                   ` Dmitry A. Kazakov
2004-03-11 14:10                                     ` Hyman Rosen
2004-03-11 14:59                                       ` Dmitry A. Kazakov
2004-03-11 15:40                                         ` Hyman Rosen
2004-03-11 16:28                                           ` Dmitry A. Kazakov
2004-03-11 17:26                                             ` Hyman Rosen
2004-03-12  8:53                                               ` Dmitry A. Kazakov
2004-03-12 13:09                                                 ` Hyman Rosen
2004-03-12 14:00                                                   ` Dmitry A. Kazakov
2004-03-12 14:56                                                     ` Hyman Rosen
2004-03-12 18:19                                                       ` Dmitry A. Kazakov
2004-03-12 18:34                                                         ` Hyman Rosen
2004-03-12 20:05                                                           ` Georg Bauhaus
2004-03-13 10:12                                                           ` Dmitry A. Kazakov
2004-03-12 18:07                                               ` Robert I. Eachus
2004-03-10 15:51                 ` Evangelista Sami
2004-03-11  1:38                   ` Dan Eilers
2004-03-06 23:20     ` Dan Eilers
2004-03-03 12:00 ` Marius Amado Alves
2004-03-13  7:51 ` Simon Wright
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox