• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pytanie do odcinka 5 obiektowego

Object Storage Arubacloud
–1 głos
231 wizyt
pytanie zadane 13 kwietnia 2016 w C i C++ przez falauthy Stary wyjadacz (11,550 p.)

Czy przy liście inicjalizacyjnej musi podawać wszystkie atrybuty klasy poprzedniej? Popatrzmy na taki kod
 


#include <iostream>
#include <math.h>

using namespace std;

class Punkt
{
protected:
    float x,y;
private:
    string nazwa;
    
public:
    void wyswietl()
    {
        cout<<nazwa<<"("<<x<<","<<y<<")"<<endl;
    }
    Punkt(string n="S", float a=0, float b=0)
    {
        nazwa = n;
        x = a;
        y = b;
    }
};

class Kolo :public Punkt //klasa Kolo dziedziczy publicznie z klasy Punkt
{
protected:
    float r;
private:
    string nazwa;
    
public:
    void wyswietl()
    {
        cout<<"Kolo o nazwie: "<<nazwa<<endl;
        cout<<"Srodek kola: "<<endl;
        Punkt::wyswietl();
        cout<<"Promien: "<<r<<endl;
        cout<<"Pole kola : "<<M_PI*r*r<<endl;
    }
    
    Kolo(string nk="Kolko", string np="S", float a=0, float b=0, float pr=1)
    :Punkt(np,a,b)
    {
        nazwa = nk;
        r = pr;
    }
};

class Kula :public Kolo{
    float z;
    string nazwa;
    
public:
    void wyswietl(){
        cout << "Kula o nazwie: " << nazwa << endl;
        cout << "Srodek kuli: ";
        cout << "(" << x << ", " << y << ", " << z << ")" << endl;
        cout << endl << "Promien: " << r << endl;
        cout << "Objetosc kuli: " << (4.0/3.0) * M_PI * r * r * r << endl;
    }
    
    Kula(string nku = "Kula", string npk = "S", float xx = 0, float yy = 0, float zz = 0, float prku = 1)
    //lista inicjalizacyjna
    :Kolo(nku, npk, xx, yy, prku)
    {
        nazwa = nku;
        z = zz;
        r = prku;
    }
};

int main()
{
    Kula k1;
    k1.wyswietl();
    
    return 0;
}

Dlaczego tutaj Pan Mirosław powiedział, że musimy użyć listy inicjalizacyjnej

:Kolo(nku, npk, xx, yy, prku)

Jeżeli nie będę używał atrybuty nku?

1 odpowiedź

0 głosów
odpowiedź 13 kwietnia 2016 przez maciekak Obywatel (1,300 p.)

Ponieważ aby stworzyć obiekt klasy pochodnej, pierwsze trzeba wywołać konstruktory klasy bazowej (tworzy się obiekt klasy bazowej, a później tak jakby nadbudowywuje się ten obiekt parametrami i metodami klasy pochodnej), ponadto, jeśli w klasie pochodnej nie umieści się na liście inicjalizacyjnej konstruktora klasy bazowej, to zostanie wywołana jego wersja domyślna.

Czy przy liście inicjalizacyjnej musi podawać wszystkie atrybuty klasy poprzedniej?

 

Nie, wywołujesz konstruktor klasy bazowej. W tym kostruktorze nie musisz wypisywać wszystkich parametrów, ponieważ mają one wartości domyślne i pomijać po kolei od prawej, wtedy zostanie im przypisana wartość podana po znaku =. Natomiast nie możesz pominąć tylko parametru nku, ponieważ jeśli byś mógł to kompilator nie wiedziałby, którą wartość pominąłeś, bo przecież mógłbyś opuścić każdy parametr i nie wiedziałby której wersji funkcji użyć. A tak to zawsze wiadomo, że pomija się ten ostatni parametr i kompilator wie jak ma się zachować w takiej sytuacji.

Problem ten możesz rozwiązać tworząc kolejny konstruktor z odpowiednimi parametrami, takimi jakie chcesz.

komentarz 13 kwietnia 2016 przez falauthy Stary wyjadacz (11,550 p.)

Problem ten możesz rozwiązać tworząc kolejny konstruktor z odpowiednimi parametrami, takimi jakie chcesz.

Tylko wtedy nie jest używana lista inicjalizacyjna?

komentarz 13 kwietnia 2016 przez maciekak Obywatel (1,300 p.)
Chcesz napisać konstruktor klasy pochodnej tak, żeby nie trzeba było używać listy inicjalizacyjnej? Dobrze rozumiem?
komentarz 13 kwietnia 2016 przez falauthy Stary wyjadacz (11,550 p.)
Nie, po prostu trenowałem kod z odcinka 5. Staram się to zrozumieć. Bo koncepcje samego konstruktora rozumiem, tylko nie rozumiałem jak wygląda pobieranie atrybutów z konstruktora klasy pochodnej.

Podobne pytania

0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 25 lutego 2016 w C i C++ przez Aisekai Nałogowiec (42,190 p.)
0 głosów
1 odpowiedź 201 wizyt
0 głosów
2 odpowiedzi 243 wizyt
pytanie zadane 20 lutego 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...