rafixxx25 Temat założony przez niniejszego użytkownika |
Wywołanie konstruktora klasy bazowej wewnątrz konstruktora klasy pochodnej » 2013-11-26 21:05:03 Mój wcześniejszy kod: Klasa::Klasa( int x, int y, int z ) : Bazowa( x, y, z, 10 ) { }
Potrzebuję zrobić coś takiego, że wywołuję konstruktor klasy bazowej w zależności od jednego argumentu wprowadzonego do konstruktora klasy pochodnej. Może lepiej zobrazuje to kod: Klasa::Klasa( int numer ) { switch( numer ) { case 1: this->Bazowa( 10, 20, 50, 10 ); break; case 2: this->Bazowa( 30, 60, 10, 10 ); break; } }
Wiem, że nie da się tego wykonać w powyższy sposób. Istnieje jakieś rozwiązanie mojego problemu? Wcześniej po prostu do klasy pochodnej podawałem wszystkie parametry i przekazywałem je do bazowej, ale drugi sposób byłby dużo wygodniejszy i czytelny. |
|
Monika90 |
» 2013-11-26 21:26:53 Wszystko zależy od okoliczności, np. od tego czy możesz zmodyfikować definicję klasy bazowej, itp. Spróbuj czegoś takiego Klasa::Klasa( int numer ) : Bazowa( numer == 1 ? Bazowa( 10, 20, 50, 10 ) : Bazowa( 30, 60, 10, 10 ) ) { }
to zakłada, że klasa Bazowa ma normalną semantykę kopiowania oraz tworzy ekstra obiekt tymczasowy klasy Bazowa, co może nie być tak wydajne jak byśmy chcieli... |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-11-26 22:01:44 Wydajność przy tworzeniu nie jest tak bardzo ważna(tworzenie obiektów praktycznie tylko na początku programu). Rzadko stosowałem konstrukcję z '?' - czy da się użyć tej metodę dla większej ilości opcji niż 2? |
|
Monika90 |
» 2013-11-27 12:39:38 Da się zagnieżdżać ? :, ale lepiej będzie wydzielić tworzenie obiektów do osobnej funkcji. Najlepiej jak Ci pokażę kod, bo nie chce mi się pisać po polsku: class T : public Base { public: T( int i ) : Base( create_base( i ) ) { } private: static Base create_base( int i ) { switch( i ) { case 1: return Base( 10, 20, 50, 10 ); case 2: return Base( 30, 60, 10, 10 ); default: return Base( 1, 2, 3, 4 ); } } };
Funkcja create_base jest statyczna, bo jest wywoływana zanim obiekt jest w pełni utworzony. |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-11-27 18:50:34 Wielkie dzięki za pomoc! |
|
« 1 » |