
//
// To jest przykładowy kod z podrozdziału 17.4.4 „Inicjacja” książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

//------------------------------------------------------------------------------

class X
{
public:
    X() {}          // Konstruktor domyślny.
};

//------------------------------------------------------------------------------

class Y
{
public:
    Y(int) {}       // Konstruktor jednoargumentowy.
                    // Nie ma domyślnego konstruktora.
};

//------------------------------------------------------------------------------

int main()
{
    double* p0;                    // Niezainicjowany: może spowodować kłopoty.
    double* p1 = new double;       // Alokuje niezainicjowany obiekt typu double.
    double* p2 = new double(5.5);  // Tworzy i inicjuje obiekt typu double o wartości 5.5.
    double* p3 = new double[5];    // Alokuje 5 niezainicjowanych obiektów typu double.

    // Oczywiście zadeklarowanie wskaźnika p0 bez jego zainicjowania oznacza proszenie się o kłopoty.
    *p0 = 7.0;

    double* p4 = new double[5];
    for (int i = 0; i<5; ++i) p4[i] = i;

    X* px1 = new X;                // Jeden obiekt typu X zainicjowany domyślną wartością.
    X* px2 = new X[17];            // 17 zainicjowanych obiektów typu X.

    //Y* py1 = new Y;                // Błąd: nie ma domyślnego konstruktora.
    //Y* py2 = new Y[17];            // Błąd: nie ma domyślnego konstruktora.
    Y* py3 = new Y(13);            // Dobrze: zainicjowano wartością 13.
}

//------------------------------------------------------------------------------
