From: pete@borland.com (Pete Becker)
Subject: Re: on OO differnces between Ada95 and C++
Date: 1996/02/26
Date: 1996-02-26T00:00:00+00:00 [thread overview]
Message-ID: <4gt3ag$76m@druid.borland.com> (raw)
In-Reply-To: 4gspen$ot0@hacgate2.hac.com
In article <4gspen$ot0@hacgate2.hac.com>, ddavenpo@redwood.hac.com says...
>
>Pete Becker (pete@borland.com) wrote:
>: In article <3129F185.41C6@Rational.COM>, jDesquilbet@Rational.COM says...
>: >
>: >- you may have several different definitions for the same class in the
>: >same program, as long as they are never compiled together in the same
>: >compilation unit; example:
>: >
>: >#define private public // *** BERK! ***
>: >#include "...h" // second definition for the same class
>: >#undef private
>
>: This is not true. A program that attempts to do this violates the one
>: definition rule, so it is not a legal C++ program.
>: -- Pete
>
>We need to be careful here with terms used to describe C++ constructs.
>A class name declaration is a C++ declaration (ARM C++ 3.1) not a definition.
This is a red herring. The issue is not about a "class name declaration", but
about the actual definition of the class.
>This is what is specified in ".h" files. There can be multiple declarations
>so the above code is legal C++ code.
There can be multiple declarations of the name, but that is irrelevant.
>There can only be one definition
>of each object, function, class, and enumerator in a program and these
>are specified in ".cc" files. Mr. Becker is correct about stating that
>there must be only one definition but that rule does not apply in this
>instance.
No, my original statement is correct: a program which contains multiple
definitions of the same class is not a valid C++ program because it violates
the one definition rule. That is exactly the case that the original message
attempts to create, as indicated by the prefatory text which says "you may
have several different definitions for the same class in the same program, as
long as they are never compiled together in the same compilation unit" and by
the comment that says "second definition for the same class". You MAY NOT have
several definitions for the same class in the same program. Changing private
members to public creates a different definition of the class and is illegal.
Class definitions are not local to a compilation unit, and cannot be treated
so cavalierly. There aren't many compilers that enforce this rule, but it is
nevertheless a constraint on valid C++ programs.
-- Pete
next prev parent reply other threads:[~1996-02-26 0:00 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
1996-02-20 0:00 on OO differnces between Ada95 and C++ Nasser Abbasi
1996-02-20 0:00 ` Robert I. Eachus
1996-02-20 0:00 ` Jerome Desquilbet
1996-02-21 0:00 ` Robert Dewar
1996-02-22 0:00 ` Jerome Desquilbet
1996-02-24 0:00 ` Robert Dewar
1996-02-22 0:00 ` Pete Becker
1996-02-23 0:00 ` Jerome Desquilbet
1996-02-26 0:00 ` Darren C Davenport
1996-02-26 0:00 ` Pete Becker [this message]
1996-02-27 0:00 ` Nigel Perry
1996-02-20 0:00 ` Norman H. Cohen
1996-02-21 0:00 ` Mark A Biggar
1996-02-22 0:00 ` Norman H. Cohen
1996-02-27 0:00 ` Adam Morris
1996-02-21 0:00 ` John English
1996-02-22 0:00 ` Gene Ouye
1996-02-26 0:00 ` John English
1996-02-22 0:00 ` Nasser Abbasi
1996-02-26 0:00 ` John English
1996-02-27 0:00 ` Dale Stanbrough
1996-02-21 0:00 ` Jon S Anthony
1996-02-21 0:00 ` Darren C Davenport
-- strict thread matches above, loose matches on Subject: below --
1996-02-21 0:00 Christian Jaensch, FRG
1996-02-26 0:00 Simon Johnston
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox