"Allan S. Olsen" <nuller@goj.net> wrote in message 
news:4b0d8aa6$0$36563$edfadb0f@dtext01.news.tele.dk...
> Hej gruppe.
>
> Jeg har lavet noget i C som jeg spekulere på om man med fordel kunne lave 
> om til Cpp.
> Sagt på en anden måde: I C har jeg en masse struct's som bliver kædet 
> sammen med andre struct's etc.
> Nu ligger det jo ligefor at bruge class istedet.
I C++ er der ingen forskel på struct og class, bortset fra medlemmer i en 
struct er public som default, mens de er privat som default i en class.
> Men pga måden jeg har bygget det op på, så har jeg lavet 3 dele hvor:
> 1 er standard deklareringer af typer etc.
> 2 er så alle 'data' typer og rutiner (funktioner).
> 3 er føde-data og her har jeg ikke mindre end 3 'arvinger' af fil 2's 
> typer.
>
> I fil 3 opretter jeg en række const og det er så her filmen knækker.
> Hvordan gør man det med class's ?
>
> Herunder hvordan det er lavet i C i meget korte træk. Meget er fjernet men 
> nok er tilbage til forståelse for problemet.
> Det der er mest interessant er linien i fil 2: struct io_Inp const *Stl;
> Som bliver sat i fil 3.
>
> Har en eller anden idé om at man ved at opbygge en class' gør noget i stil 
> af:
> class bssek BsGrSek={FALSK, &BsGrSek00, &BsGrSekBit00};
>
> Problemet er bare at bssek er en meget lille del af en ret stor struct som 
> indeholder mange andre struct, hvor jeg har behov for at initialisere alle 
> "externt" fra, da en datafil for hver kopi af hoved 'struct'en indeholder 
> alle data for denne ene kopi. Og de fleste data SKAL være konstanter.
Hvis det skal være _meget_ const kan man overveje at benytte templates og 
konstanterne som template parametre. Det giver mulighed for yderligere 
compiler-optimeringer.
>
> Sort snak ?
> Spørg frem hvis mere info ønskes.
>
> Her lidt snips fra originale C program.
>
> Mvh. Allan
>
> --- h.fil 1 ---
> typedef unsigned char UBYTE;
Giver den typedef nogen reel værdi ?
> enum {FALSK=0,SAND};
Generelt mener jeg at det er upraktisk at bruge dansk som navne i i C eller 
C++ program. Alle keywords er på engelsk, så kan klasser, funktioner, 
variable osv. også lige så godt være det.
Iøvrigt har C++ en indbygget "bool" type, der kan antage værdierne "true" og 
"false"
C99 har noget tilsvarende - men ikke identisk 
>
> struct io_Inp
> {
> UBYTE Indg;
> };
Du kan sikre at instanser af denne type bliver konstant og initialiseret ved 
at skrive (jeg har ikke oversat koden):
class io_inp
{
public:
    // constructor
    io_inp(unsigned char inp_arg) :
       inp(inp_arg) {}
    // access method
    unsigned char inp() const
       {   return inp_;  }
private:
   const unsigned char   inp_;
};
>
> struct iobit
> {
> UBYTE Gl;
> UBYTE Ny;
> };
og tilsvarende
struct iobit
{
public:
  // constructor
  iobit(unsigned char prev_value_arg, unsigned char new_value_arg) :
    prev_value_(prev_value_arg), new_value_(new_value_arg) {}
  // access methods
  unsigned char prev_value() const
   { return prev_value_;    }
  unsigned char new_value() const
    { return new_value_;  }
private:
    unsigned char  prev_value_;
    unsigned char  new_value_;
};
>
> ---h.fil 2 ---
> struct bssek
> {
> UBYTE Besat;
> struct io_Inp const *Stl;
> struct iobit *Bit;
> };
Ved at bruge reference (&) i stedet for pointer (*), tvinger man brugeren af 
typen til at sikre at objektet findes - den kan ikke være 0.
struct bssek
{
public:
   // constructor
   bssek(bool used_arg, const io_inp& stl_arg, const iobit& bit_arg) :
     used_(used_arg), stl_(stl_arg), bit_(bit_arg) {}
  // access methods
  bool used() const
   { return used_; }
  const io_inp&  stl() const
   { return stl_; }
  const iobit& bit() const
   { return bit_; }
private:
   const bool   used_;
   const io_inp&  stl_;
   const iobit& bit_;
};
>
>
> ---h.fil 3 ---
> struct io_Inp const BsGrSek00={48};
const  io_inp[] =
   {   ip_inp(48)  };
> struct iobit BsGrSekBit00={0, 0};
const bs_gr_sek_bit00(0, 0);
>
> struct bssek BsGrSek[BsGrSekAnt]=
> {
> {FALSK, &BsGrSek00, &BsGrSekBit00}
> };
const bssek  bs_gr_sek[] =
   {  bssek(false, bs_gr_sek_bit00, bs_gr_sek_bit00) };
Du får bedre indkapsling og sikring af at objekterne er const, uden det 
kommer til at fylde mere eller køre langsommere.
Er det noget i den stil du efterspørger ?
-- 
Venlig hilsen
Mogens Hansen