comp.lang.ada
 help / color / mirror / Atom feed
From: Jim Rogers <jimmaureenrogers@att.net>
Subject: Re: What exactly is a 'record' in Ada 95?
Date: Wed, 08 Sep 2004 12:58:10 GMT
Date: 2004-09-08T12:58:10+00:00	[thread overview]
Message-ID: <ClD%c.328773$OB3.269507@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: chmtr8$6lp$06$1@news.t-online.com

matthias_k <nospam@digitalraid.com> wrote in news:chmtr8$6lp$06$1@news.t-
online.com:

> So, what is a 'record' in Ada? Do I have to think about it like
> a struct in C? It seems to serve the same purpose. Is 'record' the
> only type modifier? Where are the differences?

A record is similar to a struct in C. It is not, however, exactly
the same. Ada records can have a few features not available to C
structs.

An Ada record can have one or more discriminants which are used to
discriminate between structural representations. The following 
example may be helpful.

type Gender_Type is (Male, Female);

type Person (Gender : Gender_Type) is record
   Name : Name_String;
   Age  : Natural;
   case Gender is
      when Male => 
         Beard_Length : Natural;
      when Female => 
         null;
   end case;
end record;

The first type definition defines an enumeration type.
The second type definition defines a record type with a 
discriminant. In this example, all Persons have a name
and age. A person that is Male also has a Beard_Length.

Discriminant records were introduced in Ada 83. They are
not used much in Ada 95. Ada 95 introduced the concept of
tagged types, which are frequently used instead of 
discriminant types. A tagged type is an extensible record
supporting inheritance.

type Person is tagged record
   Name : Name_String;
   Age  : Natural;
end record;

type Male is new Person with record
   Beard_Length : Natural;
end record;

Type Male inherits all the attributes of Person and adds
Beard_Length.


Records are not the only way to specify a type in Ada. 
Ada allows you to specify array types and what other
languages designate as primitive types.

type Ratings is range 1..10;

type Real is digits 15;

type Volt is delta 0.125 range 0.0 .. 255.0; 

type Money is delta 0.02 digits 10;

type Days is (Sunday, Monday, Tuesday, Wednesday,
              Thursday, Friday, Saturday);

type Daily_Sales is array(Days) of Money;

Jim Rogers





  reply	other threads:[~2004-09-08 12:58 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-08 12:27 What exactly is a 'record' in Ada 95? matthias_k
2004-09-08 12:58 ` Jim Rogers [this message]
2004-09-08 18:05   ` matthias_k
2004-09-08 13:12 ` Marc A. Criley
2004-09-08 18:08   ` matthias_k
2004-09-08 13:30 ` Peter Hermann
2004-09-08 18:09   ` matthias_k
2004-09-09 12:06     ` Peter Hermann
2004-09-18  4:14     ` Richard Pennington
2004-09-08 13:40 ` Georg Bauhaus
2004-09-08 18:22 ` Dmitry A. Kazakov
replies disabled

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