(C++) Konstruktor z parametrem typu klasy

0

Czy ktoś wie dlaczego nie można zadeklarować takiego konstruktora:

class Klasa {
public:
  Klasa(Klasa);
};

Kompilator (DevC++) pisze że można co najwyżej tak:

class Klasa {
public:
  Klasa(const Klasa&);
};
0

Poczytaj o konstruktorach kopiujących w C++.

0

A jakieś konkretne pozycje? Bo jak się domyślam Ty nie znasz odpowiedzi na moje pytanie.

0

Nie mozesz zrobic takiego konstruktora Klasa(Klasa) poniewaz jesli chcialbys utworzyc obkiekt klasa to musi on przyjac obiekt klasa. Skoro musi przyjac obiekt klasa tzn ze ten obiekt tez musi byc stworzony przez konstruktor, ktory przyjmuje obiekt klasa i tak w nieskonczonosc. To tak samo jak chcialbys uzyc do tworzenia ksiazek innych ksiazek. Tak sie nie da. Trzeba miec najpierw papier potem tekst potem tusz i dopiero mozesz drukowac ksiazke. A co do konstruktora kopijacego to przyjmuje on referencje do okiektu i kopijue go. Jesli masz klase z samych typow(int,double,bool itd.) to Ci sie on nie przyda. Moze on Ci sie przydac jak masz np wskaznik w klasie, ale i tak jeszcze o tym poczytaj. Przyklady w necie na pewno znajdziesz.

0

Troche dziwnie że kompilator nie zezwala na to nawet jeśli mamy zadeklarowany konstruktor domyślny. Ale dla chcącego nic trudnego:

class Klasa {

public:
       Klasa() {}            
};

class Klasa2 : public Klasa {

public:
       Klasa2(Klasa) {}      

};
0

Kompilator nie wie czy ty do obiektu klasa nastepnym razem uzyjesz konstruktora domyslnego czy swojego. To co napisales z dziedziczeniem ma juz sens. Klasa2 zawiera w sobie klase. Na przykladzie: Aby zrobic Pojazd(klasa pojazd) najpierw musisz wywolac knstruktory silnika kol itp a dopiero potem konstruktor samego pojazdu.

0

Hibo, to co napisałeś to bardziej pasuje do kompozycji, a nie doi dziedziczenia.

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