"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