Konstruktor i lista inicjalizacyjna

0

Mam sobie kodzik:

class Macierz
{
	private: 
		const int wiersze, kolumny;
	public:
		Macierz(int w, int k):wiersze(w>=0?w:0), kolumny(k>=0?k:0)
{
	;
}
};

Chciałbym jeszcze ustawić parametry startowe na 0 lecz nie wiem jak to zrobić aby mi nie wywalało.
O co mi chodzi?

Macierz(); // i przypisuje mi 0,0. W moim przypadku nie przypisuje żadnej wartości
2

Zrób sobie dwa konstruktory po prostu, jeden wywoływany na dwóch intach, drugi bez argumentów.

2

Zdefiniuj konstruktor domyślny:

 #include<iostream>
using namespace std;

class Macierz
{
private:
	const int wiersze, kolumny;
public:
	Macierz() : wiersze(0), kolumny(0)
	{
		cout << wiersze << " " << kolumny << endl;
	}
	Macierz(int w, int k) :wiersze(w >= 0 ? w : 0), kolumny(k >= 0 ? k : 0)
	{
		cout << w << " " << k << endl;
	}
};

int main(){
	Macierz();
	return 0;
}

Jeśli robisz tak: Macierz();, to wywali Ci się program, bo nie masz zdefiniowanego konstruktora bez parametrów.

0

Albo konstruktor z domyślnymi parametrami.
Macierz(int w = 0, int k = 0) :wiersze(w >= 0 ? w : 0), kolumny(k >= 0 ? k : 0)

0
   Macierz(int w, int k) :wiersze(w >= 0 ? w : 0), kolumny(k >= 0 ? k : 0)

a gdzie wcięcia?

osobiście jestem zwolennikiem takiego formatowania listy inicjalizacyjnej:

    Macierz(int w, int k)
        : wiersze(w >= 0 ? w : 0)
        , kolumny(k >= 0 ? k : 0)

ale zdaję sobie sprawę, że to kontrowersyjny zapis. więc może chociaż tak, klasycznie:

    Macierz(int w, int k) :
        wiersze(w >= 0 ? w : 0),
        kolumny(k >= 0 ? k : 0)

1 użytkowników online, w tym zalogowanych: 0, gości: 1