2010-08-03 13 views
11

Bir yapıcı olarak beyan sahiptir:C++ yapıcısı için varsayılan değişken değerlerini nasıl belirleyebilirim?

MyConstuctor::MyConstuctor(int inDenominator, 
    int inNumerator, int inWholeNumber = 0) 
{ 
    mNum = inNumerator; 
    mDen = inDenominator; 
    mWhole = inWholeNumber; 
} 

olarak

MyConstuctor(int inDenominator, int inNumerator); 

ve tanımı ama arayan nesnesine bağlı olarak, üçüncü parametre olarak tam sayı geçen bir seçenek istiyorum. Bu doğru yol mu. eğer değilse alternatif yol ne olabilir.

cevap

34

İhtiyacın olan:

//declaration: 
MyConstuctor(int inDenominator, int inNumerator, int inWholeNumber = 0); 

//definition: 
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) 
{ 
    mNum = inNumerator; 
    mDen = inDenominator; 
    mWhole = inWholeNumber; 
} 

Eğer inWholeNumber için varsayılan olmayan bir değer sağlamak mümkün olacak Bu şekilde; ve bunu sağlayamayacaksınız, böylece 0 varsayılan olarak kullanılacaktır. Ek bir ipucu olarak


, daha iyi tanımında initialization list kullanın:

//definition: 
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) : 
    mNum(inNumerator), mDen(inDenominator), mWhole (inWholeNumber) 
{ 
} 
+0

teşekkürler. – boom

4

Hayır, yalnızca yöntemin beyanında varsayılan değeri sağlamanız gerekir. Yöntemin tanımı, varsayılan değer olmadan tüm 3 parametreye sahip olmalıdır. Sınıfın kullanıcısı 3. parametreyi geçmeyi seçerse, kullanılacaksa, beyanda belirtilen varsayılan değer kullanılır.

1

Siz de beyanname varsayılan parametresini eklemeniz gerekir ve uygulanmasında varsayılan değer gerekli değildir. Bu ipuçları için

+1

AFAIK, varsayılanı her iki yerde de verebilir, ancak her argüman için bir kereden fazla değil (hem bildirim hem de tanım olarak). Belgeleme amacıyla, sınıf tanımında tüm varsayılanların verilmesi önerilir (sınıfın kullanıcıları, nasıl kullanıldığını görmek için sınıf uygulamasına bakmaya gerek duymamalıdır). – UncleBens

İlgili konular