2016-04-01 17 views
1

Diyelim ki Engine adında bir sınıfla çalışıyorum. benim anlamadığım yeni bir nesne bu sınıfı başlatmak ve oluşturmak için bir yol gibi yapılabilir olmasıdır itibaren aşağıdaki:Sınıf üyelerini nasıl başlatacağına dair şaşkınlık

string type = "v8"; 
Engine engine(type); 

Bu yeni bir Motoru nesnesi yaratır ... Şimdi ne olacak ben ikinci sınıf varsa

class Car 
{ 
    private: 
     Engine engine; 
    public: 
     Car(); 
} 

Car.cpp

Car::Car() { 
    // Need to initialize Engine 
} 

Car.h: Motor sınıfının bir üyesi var denilen Araba

Üye motorunu nasıl başlatırım, başlık dosyasından zaten başlatılmış değil mi? Motor şuydu: Eğer Engine, bir kurucu Engine() ve başka bir Engine (string) aracının Araç başlığında başlatılmayacağı polimorfik kuruculara sahipse? Ben Car'ın yapıcı Bu gibi çalışır

cevap

2

içinde başlatılır boş Motor üyesini istediğiniz Car anlatmak nasıl:

Car::Car(void) : engine("whatever you want") 
{ 
} 

Bu sınıfın üyeleri nasıl başlatıldığını anlatıyor. Farklı Otomobil oluşturucu aşırı yükleri, motorunuzu farklı yollarla çalıştırabilir

0

3 seçeneğiniz var (C++ 11'den itibaren).

Sınıf içi başlatıcıyı kullanabilirsiniz. Bunun gibi:

Üye başlatma listesini kullanabilirsiniz. Şunun gibi:

struct B { 
B() : i{42} {} 
    int i; 
}; 

Yoksa (o olmuştur sonra bir varsayılan kurucu varsa varsayılan başlatıldı) kurucu vücutta üyesini atayabilir. Şunun gibi:

struct C { 
    C() { i = 42; } 
    int i; 
}; 

son seçenek genellikle ne üye ilk yapıcı vücut girilir önce olur üyesi başlatma parçası olarak inşa default edilecek çünkü bu durumda istiyorum (yukarıdaki struct B görmedim) ve daha sonra ona atarsınız. Bu örneklerde kullandığım int gibi bir tür için ilgisizdir, ancak yapılandırılması ve atanması pahalı olan türler için önemli olabilir.

Ayrıca 3 formu birleştirebilirsiniz. Örneğin:

struct D { 
    D() : i{1} // this overrules the in-class initializer 
    { i = 3; // assign a new value despite the fact that we constructed the object already 
    } 
    int i = 0; // initial value 
}; 
İlgili konular