Zmienne a dziedziczenie w obiektowym C++

Złoty Szczur
2015-09-01 20:33
Złoty Szczur
0
class Bazowa
{
    int x;
public:
    Bazowa( int a )
        : x( a )
    { }
};

Od niedawna czytam o programowaniu obiektowy, wiem że moje pytanie może i głupie, z pewnością banalne, ale o co chodzi w tym zapisie:

Bazowa( int a )
        : x( a )
    { }

Jak by mi ktoś mógł podać definicję i zastosowanie takiego zapisu.
Z góry dziękuje.

Pozostało 580 znaków

2015-09-01 20:36

Rejestracja: 7 lat temu

Ostatnio: 22 minuty temu

0

Lista inicjalizacyjna konstruktora, inicjalizuje zmienną x za pomocą a

Pozostało 580 znaków

2015-09-01 20:39

Rejestracja: 5 lat temu

Ostatnio: 14 godzin temu

Lokalizacja: Szczecin

0

Taki zapis oznacza inicjalizację prywatnej (przez domniemanie) zmiennej "x" wartością "a" podczas utworzenia klasy.

Pozostało 580 znaków

Złoty Szczur
2015-09-01 20:39
Złoty Szczur
0

Może coś więcej jak wspomniałem jestem nowy i twoje słowa sprawiły że jeszcze mniej rozumiem :<
Postaraj się, proszę opisać to jak najprościej...

Pozostało 580 znaków

2015-09-01 21:00

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

0

Jeżeli dobrze pamiętam to składowe obiektu są inicjalizowane podczas tworzenia obiektu, a nie w momencie kiedy ten obiekt juz jest stworzony i edytujesz wartości składowych. Dobrym przykładem jest jakaś zmienna const, nie można zmienić jej w ciele konstruktora ale w liście inicjalizujacej juz tak.

Pozostało 580 znaków

2015-09-01 21:05

Rejestracja: 5 lat temu

Ostatnio: 4 lata temu

1
Bazowa( int a )
        : x( a )
    { } 

zadziała tak jak

Bazowa( int a )
{
     x = a; 
} 

Lista inicjalizacyjna na pierwszy rzut oka działa tak samo jak zwykły konstruktor, różnica jest taka,
że można np. użyć jej do inicjalizacji pól const, czy wywołać konstruktor klasy bazowej:

class Bazowa
{
public:
    int pole;

    Bazowa(int p)
    {
        pole = p;
    }
};

class Pochodna : Bazowa
{
public:
    const int stala;

    Pochodna(int p)
    {
        stala = p; // bład, to się nie skompiluje!
    }
};

class InnaPochodna : Bazowa
{
public:
    const int stala;

    InnaPochodna(int p): Bazowa(p), stala(p) {} // Tu już ok.
}; 

Si non confectus, non reficiat.
edytowany 1x, ostatnio: Reinicke, 2015-09-01 21:16
Bazowa(p) nie skompiluje się tylko dlatego, że nie ma średnika. To poprawny (nie robiący niczego sensownego) kod. - Endrju 2015-09-01 21:08
Racja:D zapędziłem się. - Reinicke 2015-09-01 21:15

Pozostało 580 znaków

Wielki Lew
2015-09-01 21:39
Wielki Lew
0

Dziękuje bardzo za pomoc wszystkim i pozdrawiam :)

Pozostało 580 znaków

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