Fehler abfangen in Initialisierungsliste unmöglich



  • Hallo, ich lerne gerade Klassen mit C++ zu benutzen. Dabei habe ich gelernt, dass man immer eine initialisierungsliste für Konstruktoren benutzen soll.

    class foo
    {
        int bar;
    
       public:
        foo(int a) : bar(a) {}
    };
    

    Doch was ist, wenn man bei a=0 bar auf 1 setzen möchte?

    foo(int a) { if(a)bar=a; else bar=1; }
    

    Aber in dem Falle hat man ja keine Initialisierungsliste mehr. Ist das schlimm? Welche Auswirkungen könnte das haben? Wie umgeht man dieses Problem?

    mfg
    Hulby



  • zur not, wenns wirklich in der initliste sein soll:

    class foo
    {
      int bar;
    public:
      foo(int a) : bar(a==0 ? 1 : a) {}
    };
    

    Sonst:

    foo(int a) : bar(a) { if (a==0) bar = 1;}
    


  • class foo
    {
        int bar;
       static int f(int x){if(x) return x; else return 1;}
       public:
        foo(int a) : bar(f(a)) {}
    };
    

    Nicht hübsch, aber meistens besser als ?:
    Vielleicht ist !a eine seltene Ausnahme, die man gerne nachher erst bereinigen darf. Konsistent muß das Objekt erst nach dem Konstruktor-Aufruf sein.

    class foo
    {
        int bar;
       public:
        foo(int a) : bar(a) {if(!bar) bar=1;}
    };
    

Anmelden zum Antworten