2010-09-10 14 views
6

Bir yapim var:C++ işlevindeki bir yapıya nasıl varsayılan değer atayabilirim?

typedef struct { 
    double x,y,z; 
} XYZ; 

double CalcDisparity(XYZ objposition, 
        XYZ eyeposition, 
        double InterOccularDistance = 65.0) 

Ancak, göze çarpan bir varsayılan değer atamanın bir yolunu bulamıyorum. Bunu C++'da nasıl yapabilirim?

+0

bu düz C veya C++ nedir? – diverscuba23

+3

@drknexus, C++ öğesindeki bir yapı, bir sınıf üyeleri varsayılan olarak özel iken, üyelerin varsayılan olarak genel olduğu dışında bir sınıfla tam olarak aynıdır. Bu kadar. Yapılar, bir sınıfın sahip olduğu temelde kurucu, yıkıcı, yöntem olabilir. Şimdi C'den bahsediyorsan, onlar yine farklılar, bu yüzden – Glen

+0

hakkında hangi dilde konuştuğun konusunda net olmalısın C++, bu yüzden sorudan C'yi çıkarmak için soruları ve etiketleri düzenledim. –

cevap

11

O

struct XYZ{ 
    XYZ(double _x, double _y, double _z) : x(_x), y(_y),z(_z){} 
    XYZ() : x(0.0), y(42.0), z(0.0){} 

    double x, y, z; 
}; 

yüzden şimdi varsayılan bir kurucuya sahip olduğunu bu.

double CalcDisparity(XYZ objposition = XYZ(), 
         XYZ eyeposition = XYZ(), 
         double interOccularDistance = 65.0) 

Ama bir küçük numara var: Sonra böyle diyoruz 1'inde ve sadece 3 argümanlar için varsayılan bir değer yapamaz. Bir şey daha: C bir dildir, C++ başka bir dildir.

+0

ek kurucular tanımlarsanız yapabilirsiniz .... bundan sonra dikkatli gerçek var .... mesela daha önce böyle bir parça kabul ve soruluyor soruya yanlış bilgi verdi var çift ​​_z): x (_x), y (42.0), z (_z)}; çift ​​CalcDisparity (XYZ objposition = XYZ(), XYZ eyeposition = XYZ (1.0, 2.0), çift interOccularDistance = 65.0); ' –

1
  1. XYZ nesnelerini oluşturmak için bir fabrika işlevi yazabilir ve işlevi varsayılan değer olarak çağırabilirsiniz.

  2. Varsayılan değeri NULL yapar ve sonra argüman NULL ise, eğer varsa, varsayılan bir XYZ oluşturarak işlevi kontrol edebilirsiniz.

  3. Genel bir XYZ nesnesi oluşturun ve varsayılan olarak atayın.

  4. C++ yerine saf C kullanmaktan çekiniyorsanız, XYZ'yi bir kurucu ile bir sınıf haline getirin.

Bunlar derlenecek ve çalışacak tüm yollardır, ancak bazıları iyi kodlama uygulamaları olmayabilir.

+0

o C++ kullanıyor o zaman bir yapı olarak bırakabilirsiniz, ama bunu bir yapıcısı – Glen

2

C10'da, işlev bağımsız değişkenleri varsayılan değerlere sahip olamaz (yaklaşık C++ hakkında bilmiyorum).

C numaralı telefondan yapabilecekleriniz, (bir şekilde) geçersiz değerden geçiyor, bu geçersiz değeri kontrol ediyor ve başka bir tane kullanıyor.

int foo(int n) { 
    if (n == -1) { /* -1 is invalid */ 
    n = 42;  /* use 42 instead */ 
    } 
    /* ... */ 
} 
+0

verebilir eğer zaman bu cevabı verildi, soru 'C' olarak etiketlendi; C etiketi kaldırıldı çünkü C argümanlar için varsayılan değerleri desteklemiyor. –

+0

C++, varsayılan değerleri destekler. – andand

-1

Son çözümü, çözümümün bir parçası ile birleştirebilirsiniz. Bir örnek sayacı uygularsınız. Bu sayaç 0 ise, değeri başlatırsınız. Ancak sayaç hiçbir zaman 0 ...

'dan başka bir şeye ulaşamaz.

İlgili konular