Skocz do zawartości
mathias79

kontener <vector> VS. konstruktory

Rekomendowane odpowiedzi

Witam

Czy ktoś wie może czy po umieszczeniu jakiejś klasy w vektorze, zostanie wywołany kontruktor ? A jeśli tak to jaki ? Zwykły czy kopiujący ?

 

... kod mogłby wyglądać tak :

 

class chromosom {};

chromosom chr_1;

vector <chromosom> v;

v.push_back(chr_1);

 

jakoś tak ...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A niby czemu mialby byc wywolywany? Konstruktor jest wywlywany przy tworzeniu obiektu (w 2 linijce).

A na przyszlosc to mozesz sobie to latwo sprawdzic, umiesc w konstruktorze(rach) jakies cout'y i zobaczysz.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A niby czemu mialby byc wywolywany? Konstruktor jest wywlywany przy tworzeniu obiektu (w 2 linijce).

to fakt ale czy konstruktor kopiujący nie jest przypadkiem wywoływany gdy obiekt jest przesyłany do funkcji ?

A na przyszlosc to mozesz sobie to latwo sprawdzic, umiesc w konstruktorze(rach) jakies cout'y i zobaczysz.

też fakt. zaraz to sobie sprawdze. ale siedziałem akurat w pracy gdy mnie naszło i nie miałem jak tego sprawdzić. aby dać upust męczącemu mnie pytaniu napisałem posta ... :D

dobra .. zabieram się do klepania ... zaraz zobaczymy ... :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

sprawdziłem ... i to nie przejdzie.

funkcja push_back() faktycznie stara się wywołać konstruktor kopiujący ale wywala błąd

"

48 c:dev-c_~1includeg__~1stl_construct.h

conversion from `const tChromosom' to `tChromosom &' discards qualifiers

"

 

a oto prosty kodzik do zobarazowania tego co chciałem zrobić (czy tam jest jakiś bład ? )

#include <iostream>#include <vector>using namespace std;class tChromosom      {      int iChain[29];      public:      tChromosom(void)                {                cout << "1,2,3 proba konstruktora klasy tChromosom;-)" << endl;                }      tChromosom(tChromosom &);                     };tChromosom::tChromosom(tChromosom & wzor)                                  {                                  }class tPopulation      {      public:      vector <tChromosom> vPop_vect;      };int main(int argc, char *argv[]){tPopulation Population;tChromosom chr1;Population.vPop_vect.push_back(chr1);system("PAUSE");  return 0;}
po zmianie w konstruktorze kopiującym na

tChromosom::tChromosom([B]const[/B] tChromosom & wzor)                                  {                                  }
jest już lepiej .... lecz pozostaje inny błąd

"

19 c:!!__mp~2vector.cpp

prototype for `tChromosom::tChromosom(const tChromosom &)' does not match any in class `tChromosom'

"

już się trochę zakręciłem ...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Musisz uważnie czytać informacje o błędach, które wypisuje Ci kompilator. Zapomniałeś dodać const w definicji klasy. Kod powinien wyglądać tak:

 

#include <iostream> #include <vector>using namespace std; class tChromosom      {       int iChain[29];       public:      tChromosom(void)                 {                 cout << "1,2,3 proba konstruktora klasy tChromosom;-)" << endl;                }       tChromosom(const tChromosom &);      }; tChromosom::tChromosom(const tChromosom & wzor)                                  {                                   } class tPopulation       {      public:       vector <tChromosom> vPop_vect;      }; int main(int argc, char *argv[]){tPopulation Population;tChromosom chr1;Population.vPop_vect.push_back(chr1);system("PAUSE");  return 0;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zapomniałeś dodać const w definicji klasy. Kod powinien wyglądać tak:

chyba w deklaracji konstruktora kopiującego.

Musisz uważnie czytać informacje o błędach, które wypisuje Ci kompilator.

zgadzam się. ale muszę się przyzwyczaić do komunikatów Dev-C++. jak na razie pracowałem na innych kompilatorach .. a siła przyzwyczajenia jest wręcz potworna :wink:

dziękuję wszystkim za pomoc i mam jeszcze jedno pytanie.

rozumiem że klasa tChromosom nie jest const a tylko argument przesyłany do konstruktora kopiującego jest const ...

czyli jednym słowem funkcja push_back() gwarantuje że nie naruszy nam obiektu wrzuconego do teko kontenerka ? dobrze to rozumiem .. w sumie chyba sam sobie odpowiedziałem .... :D :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...