Po krótce szybko wytłumaczę o co biega. Mam zadanie które polega na stworzeniu konstruktorów do klasy w odpowiedni sposób, tak żeby wyświetlały przy inicjalizacji odpowiednie rzeczy.
Mam klasę Pojazd mającą numer rejestracyjny i wskaźnik na tą samą klasę i w niej metodę "dodaj_przyczepe"
class Pojazd{
string tablica_rejestracyjna;
Pojazd *przyczepa = NULL;
public:
void dodaj_przyczepe(Pojazd *przycz){
przyczepa = przycz;
}
Teraz mam stworzyć konstruktory w odpowiedni sposób tak żeby wyświetlały przy tworzeniu obiektu czy "pojazd" jest tworzony jednocześnie z przyczepą:
Pojazd toyota("SGL 1233") // Wypisuje: Konstruktor z parametrem, rej. "SGL 1233", przyczepa: brak
Pojazd * maluch = new Pojazd(); // Wypisuje: Konstruktor domyślny, rej. "Ekstra", przyczepa brak
//I tutaj ten problematyczny przypadek:
toyota.dodaj_przyczepę(new Pojazd("SAW 1122")); // Wypisuje: Konstruktor domyślny, rej. "SAW 1122"
W tym ostatnim przypadku nie ma dopisane "brak przyczepy"... gdy tworzy obiekt zauważa w jakiś sposób że to jest "przyczepa" a raczej że jest to tworzone w ramach innego obiektu i nie wiem jak to zauważyć.... narazie wymyśliłem jak "potem" to może sprawdzić za pomocą NULL ale nie wiem jak sprawdzić to w momencie tworzenia obiektu, to moje konstruktory... a raczej wkleję po prostu całą klasę i main:
class Pojazd{
string tablica_rejestracyjna;
Pojazd *przyczepa = NULL;
static int suma;
public:
Pojazd(){
tablica_rejestracyjna = "Ekstra";
string czy_jest = "przyczepa: brak";
if(przyczepa != NULL)
czy_jest = "";
cout << "Konstruktor domyslny: " << tablica_rejestracyjna << " " << czy_jest << endl;
}
explicit Pojazd(string dowolna):tablica_rejestracyjna(dowolna){
string czy_jest = "przyczepa: brak";
if(przyczepa != NULL)
czy_jest = "";
cout << "Konstruktor z parametrem: " << tablica_rejestracyjna << " " << czy_jest << endl;
};
~Pojazd(){
string czy_jest = "przyczepa: brak";
if(przyczepa != NULL)
czy_jest = "";
cout << "Destruktor: rejestracja " << tablica_rejestracyjna << " " << czy_jest << endl;
};
void dodaj_przyczepe(Pojazd *przycz){
przyczepa = przycz;
}
};
int main() {
Pojazd toyota("SGL 1234");
Pojazd *maluch = new Pojazd();
delete maluch;
toyota.dodaj_przyczepe(new Pojazd("SGL 334"));
return 0;
)
Ogólnie to potem po stworzeniu obiektu działa i widzi że jest przyczepa co widać przy użyciu destruktora.... ale co zrobić żeby w momencie tworzenia klasa sama z siebie zauważała że "oho! obiekt tworzony jest na potrzeby innej klasy.... więc to jest przyczepa... wyświetlę inny tekst bez "brak przyczepy"
Próbowałem coś zrobić z konstruktorem kopiującym bo w zasadzie
toyota.dodaj_przyczepe(new Pojazd("SGL 334"));
To tak trochę skorzystanie z kopiującego konstruktora... tylko przypisanie do starego obiektu nowego... ale nie mam pojęcia jak to dalej wykorzystać.
Byłbym wdzięczny za pomoc