Dzień dobry.
Mam pewien problem.
Otóż posiadając klasę A, której jednym z atrybutów jest tablica elementów typu double (public), tworzę klasę B, która jest pochodną klasy A. Klasa B poza elementami odziedziczonymi posiada tylko metodę sortującą (private).
Klasa A natomiast posiada szereg metod i funkcji zaprzyjaźnionych (przeciążenia operatorów, alokowanie tablicy double, dodawanie elementu do tej tablicy, zmienianie rozmiaru itd.), które zmieniają długość/wartości tej tablicy.
Klasa B ma być niemalże identyczna do A z tym wyjątkiem że ma przechowywać w tej tablicy elementy posortowane. Czyli przy każdym wywołaniu funkcji, która została napisana dla A i odziedziczone przez B, ma na bieżąco sortować tablicę z obiektu klasy B.
class A
{
public:
double *t;
int size;
.
.
.
void operator = (const A&);
double& operaotr [](const int);
void set_size(const int);
void dodaj(const double);
friend istream& operator >> (istream&, A&);
};
class B:public A
{
private:
void sort();
.
.
.
};
Przeładowanie operatora = nie zmienia jego zasady działania (tzn po prostu do jednego obiektu przypisuje drugi)
Przeładowanie operatora [] również nie zmienia (Obiekt[2] pozwala odnieść się do 3 elementu tablicy tej klasy)
funkcja set_size() ustawia nowy rozmiar, elementy tablicy nie są zamazywane a jeśli rozmiar jest większy od obecnego to dopisywane są zera
funkcja dodaj() dodaje element na końcu tablicy
operator >> również nie zmienia zasady działania, wczytuje po prostu do tablicy podane wartości
Moje pytanie jest takie:
Czy da się zrobić tak, aby klasa B dziedziczyła z A i posiadała tylko prywatną metode sort() oraz swoje konstruktory i destruktor, a mimo to po wywołaniu opisanych wyżej funkcji elementy w tablicy na bieżąco się sortowały?
Bo raczej nie chodzi o to, żeby przepisywać drugi raz te same metody skoro to jest dziedziczenie.
Mogę to zrobić w taki sposób, że piszę definicje metody drugi raz dla klasy B i w niej zamiast pisać całego ciała tej metody to wywołuje odpowiadającą jej metodę klasy A a później funkcję sort(), ale takie rozwiązanie również chyba nie ma sensu.
Jak inaczej mogę to rozegrać aby przy każdym odniesieniu się do obiektu klasy B była wywoływana funkcja sort.
A Oa;
B Ob;
Ob = Oa; // Od razu sortuje tablice która leci do Ob
Ob[3] = 5; // I sortowanie..
Ob.dodaj(); // Sortowanie..
Ob.set_size(5); // Sortowanie..
cin >> Ob; // I tu też sortuje..