Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie konstruktora klasy bazowej wewnątrz konstruktora klasy pochodnej

Ostatnio zmodyfikowano 2013-11-27 18:50
Autor Wiadomość
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:
C/C++
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:
C/C++
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.
P-97617
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
C/C++
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...
P-97622
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?
P-97625
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:
C/C++
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.
P-97643
rafixxx25
Temat założony przez niniejszego użytkownika
» 2013-11-27 18:50:34
Wielkie dzięki za pomoc!
P-97688
« 1 »
  Strona 1 z 1