Witam,
Utworzylem nastepujaca klase:
#ifndef _MACIERZ_H
#define _MACIERZ_H
class Macierz {
protected:
int ilkolumn;
int ilwierszy;
float** macierz;
public:
Macierz();
Macierz(int, int);
Macierz(std::string);
~Macierz();
void wyswietl();
void zrobzerowa();
void randomizuj();
// obsluguje dwie nieujemne
void randomizuj(int, int);
};
// do obslugi macierzy kwadratowych
class Kwadratowa : public Macierz {
public:
Kwadratowa(int);
~Kwadratowa();
void jednostkowa();
float wyznacznik();
};
#endif /* _MACIERZ_H */
Program nie chce sie kompilowac jesli nie dopisze domyslnego konstruktora Macierz::Macierz() nawet jesli obiekty sa tworzone tylko w nastepujacy sposob:
Macierz a(2, 5);
Macierz b(3,5);
Przeniesienie konstruktora Macierz::Macierz() do sekcji prywatnej klasy nie rozwiazuje problemu. Chce zabronic by nie mozna bylo tworzyc obiektow w ten sposob:
Macierz c;
Logicznym rozwiazaniem wydaje sie brak takiego konstuktora.
Komunikat kompilatora:
g++ -o main main.cpp macierz.cpp -g
macierz.cpp: In constructor ‘Kwadratowa::Kwadratowa(int)’:
macierz.cpp:101: error: no matching function for call to ‘Macierz::Macierz()’
macierz.cpp:28: note: candidates are: Macierz::Macierz(std::string)
macierz.cpp:10: note: Macierz::Macierz(int, int)
macierz.h:11: note: Macierz::Macierz(const Macierz&)
Problem pojawia sie na konstruktorze klasy Kwadratowa (nie wiem dlaczego chce wywolac Macierz::Macierz())
Kwadratowa::Kwadratowa(int wymiar)
{
if(wymiar <= 0)
cout << "Nieprawidlowy wymiar!" << endl;
ilwierszy = wymiar;
ilkolumn = wymiar;
// inicjalizacja dynamicznej tablicy
// dla wierszy
// pomysl na alokacje:
// zaalokuj wskazniki na wiersz
// dla kazdego wiersza (wskaznika) zaalokuj kolumny
macierz = new float*[wymiar];
for(int i = 0; i < wymiar; i++)
macierz[i] = new float[wymiar];
}
Co ciekawe klasa Kwadratowa nie potrzebuje takiego konstruktora i nie moge utworzyc obiektu w ten sposob:
Kwadratowa x;
Na takim efekcie mi zalezy.
Myslalem, ze konstruktory i destruktory nie sa dziedziczone, skad ten dziwny efekt?
Pozdrawiam i dziekuje za zainteresowanie,