2016-07-28 2 views
9

Gibt es eine Möglichkeit, Code-Replikation über verschiedene Konstruktoren einer Klasse zu vermeiden?Gibt es eine Möglichkeit, Code-Replikation über verschiedene Konstruktoren einer Klasse zu vermeiden?

class sample 
{ 
    int a, b; 
    char *c; 
public: 
    sample(int q) : 
     a(0), 
     b(0), 
     c(new char [10 * q]) 
    { 
    } 

    sample() : 
     a(0), 
     b(0), 
     c(new char [10]) 
    { 
    } 
} 
+0

was ist die Bedeutung von 'q, a, b'? Als Benutzer dieser Klasse würde ich es verwirren, dass 'a == b == Größe der Zeichenkette * 10', während dies für den anderen Konstruktor nicht der Fall ist. Wenn Sie das beheben würden, könnten Sie einfach einen Standardwert für "q" angeben. – user463035818

Antwort

9

Es heißt ein delegierender Konstruktor. In Ihrem Fall würde es so aussehen:

sample(int q) : sample(q, 10 * q) 
{ 
} 

sample() : sample(0, 10) 
{ 
} 

sample(int q, int d) : a(q), 
    b(q), 
    c(new char [d]) 
{ 
} 
+1

Die Frage ist nicht mit C++ 11 getaggt, also sollten Sie präzisieren, dass dies erst seither verfügbar ist. – Holt

+0

Nun, du hast es einfach getan, für mich. –

+6

@Holt Da es Mitte 2016 ist, würde ich sagen, dass es an der OP liegt zu sagen, ob sie * nicht * C++ 11 oder später benutzen. – CoryKramer

2

Bei Sie nicht haben C++ 11, können Sie eine private void init(...) Funktion verwenden. Beachten Sie, dass Sie Const Refs auf diese Weise nicht initialisieren können.

1

Ich würde vorschlagen, Sie verwenden In-Class-Initialisierung.

class sample 
{ 
    int a = 0; 
    int b = 0; 
    char *c; 
public: 
    sample(int q) : c(new char [10 * q]) {} 
    sample() : c(new char [10]) {} 
} 
Verwandte Themen