Pertanyaan Bagaimana Anda menggunakan konstruktor non-default untuk anggota?


Saya memiliki dua kelas

class a {
    public:
        a(int i);
};

class b {
    public:
        b(); //Gives me an error here, because it tries to find constructor a::a()
        a aInstance;
}

Bagaimana saya bisa mendapatkannya sehingga Instance adalah instantiated dengan (int i) daripada mencoba mencari konstruktor default? Pada dasarnya, saya ingin mengendalikan pemanggilan konstruktor dari dalam konstruktor b.


12
2018-01-18 20:24


asal


Jawaban:


Anda perlu memanggil (int) secara eksplisit dalam daftar penginisialisasi konstruktor:

b() : aInstance(3) {} 

Di mana 3 adalah nilai awal yang ingin Anda gunakan. Meskipun bisa jadi int. Lihat komentar untuk catatan penting tentang pesanan dan peringatan lainnya.


21
2018-01-18 20:26



Gunakan daftar inisialisasi:

b::b() : aInstance(1) {}

3
2018-01-18 20:27



Cukup gunakan konstruktor yang didefinisikan seperti ini:

class b {
public:
    b()
    : aInstance(5)
    {}
    a aInstance;
};

0
2018-01-18 20:28



Saya pikir Anda harus menggunakan pointer ke 'a' seperti:

class b {
public:
    b() : aInstance(new a(5)) {}
    a *aInstance;
};

Dengan cara ini Anda akan memiliki perilaku yang ditentukan. Tentu saja Anda harus membebaskan * aInstance di destructor.


-2
2018-01-18 21:06