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;} };