2016-07-28 13 views
9

Bir sınıfın farklı yapıcılarında kod çoğaltmasından kaçınmanın bir yolu var mı?Bir sınıfın farklı yapıcılarında kod çoğaltmasından kaçınmanın bir yolu var mı?

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

q, a, b'nin anlamı nedir? Bu sınıfın bir kullanıcısı olarak, diğer kurucu için bu durumun 'a == b == büyüklüğünün * 10' olduğunu hatırlıyorum. Bunu düzeltecekseniz, 'q' için varsayılan bir değer sağlayabilirsiniz. – user463035818

cevap

9

Delegating kurucu olarak adlandırılır. Senin durumunda bu şekilde görünecektir: durumunda

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

Soru C++ 11 olarak etiketlenmemiş, bu nedenle bunun yalnızca o zamandan beri mevcut olduğunu kesinleştirmelisiniz. – Holt

+0

Eh, sadece benim için yaptın. –

+6

@Holt 2016'ya kadar ortasına geldiğim için, OP'nin C++ 11 veya üstü kullanarak * olmadığını * belirtmek yeterlidir. – CoryKramer

2

C++ 11, özel bir void init(...) işlevini kullanabilirsiniz değil yapmak . Yapılandırmayı başlatamayacağınızı unutmayın bu şekilde.

1

Sınıf içi başlatmayı kullanmanızı öneririm.

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