korzystanie z metody klasy dziedziczącej przez obiekt klasy bazowej

2012-04-05 19:04
0

Mamy np. dwie klasy oraz definicje metod i akcesorów, które one zawierają.


class punkt
{
private:
     float x, y;
public:
    punkt (float, float);
    void przesun (float, float);
    float odcieta();
    float rzedna();
};

punkt::punkt (float a, float b)
{
    x = a;
    y = b;
}

void punkt::przesun(float dx, float dy)
{
    x = x + dx;
    y = y + dy;
}
float punkt::odcieta()
{
    cout << "Wspolrzedna x: " << x << endl;
    return x;
}

float punkt::rzedna()
{
    cout << "Wspolrzedna y: " << y << endl << endl;
    return y;
}

class punkta : public punkt
{
public:
    punkta(float, float);
    float promien();
};

float punkta::promien()
{
    float r=0, a=0;
    a=odcieta()*odcieta()+rzedna()*rzedna();
    r=sqrt(a);
    return r;
}

Klasą bazową dla "punkta" jest klasa "punkt". Klasa "punkta" zawiera metodę "promien", która zwraca wartość typu float (odległość punktu od środka układu współrzędnych kartezjańskich).

Tworzymy obiekt typu "punkt" i inicjalizujemy go. Klasa ta nie zawiera jednak metody "promien", zawiera ją natomiast klasa pochodna - "punkta". Teraz pytanie - w jaki sposób obiekt klasy bazowej może użyć metody klasy pochodnej ?

Coś takiego nie zadziała.

 int main()
{
    float x=0, y=0, r=0;

    cout << "Podaj wspolrzedne punktu:" << endl;
    cout << "x: "; cin >> x;
    cout << "y: "; cin >> y;
    punkt a (x, y);
    a.odcieta();
    a.rzedna();

    r=a.promien();
    cout << "Promien: " << r << endl << endl;;

    getch();
    return 0;
}

Kod się lekko "rozjechał" po wrzuceniu na forum.


edytowany 1x, ostatnio: cichociemny, 2012-04-05 19:04

Pozostało 580 znaków

2012-04-05 19:08
Rev
0

Utwórz obiekt typu punkta.


Pozostało 580 znaków

2012-04-05 19:11
0

Wiem, że tak można i to jest konsekwencja wykorzystywania dziedziczenia. Ale czy da się zrealizować to, o czym napisałem ? Wykorzystać metodę klasy pochodnej dla obiektu klasy bazowej.


Pozostało 580 znaków

2012-04-05 19:38
nzd
0

jedynie jest jest statyczna

Pozostało 580 znaków

2012-04-05 19:53
0
cichociemny napisał(a)

Wiem, że tak można i to jest konsekwencja wykorzystywania dziedziczenia. Ale czy da się zrealizować to, o czym napisałem ? Wykorzystać metodę klasy pochodnej dla obiektu klasy bazowej.

Jaki to ma mieć niby sens?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2012-04-05 19:56
0

Dla mnie żaden, ale wykładowca tak sobie wymyślił.


Pozostało 580 znaków

2012-04-05 23:11
no_name
1

Powiedz lepiej wykładowcy, że jest debilem.

Pozostało 580 znaków

2012-04-05 23:32
1

A ja myśle że autor po prostu nie słuchał na zajęciach a zadanie ma obrazować polimorfizm -> ma stworzyć obiekt punkta i przypisać go do wskaźnika na punkt a potem wywołać metodę i pokazać że wywołała się ta z klasy pochodnej.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2012-04-05 23:59
0
Shalom napisał(a)

A ja myśle że autor po prostu nie słuchał na zajęciach a zadanie ma obrazować polimorfizm -> ma stworzyć obiekt punkta i przypisać go do wskaźnika na punkt a potem wywołać metodę i pokazać że wywołała się ta z klasy pochodnej.

Słuchał, słuchał. Programowanie to moje ulubione zajęcia :) Tylko, że uczy nas facet, który nie bardzo potrafi wytłumaczyć niektóre rzeczy i czasem trzeba go poprawiać. Sam mówi, że on to z programowania "nie bardzo" :P Pytanie, dlaczego w takim razie uczy ? Nie mówiąc już o zadaniach, które pochodzą z Google -> "zadania z c++". :)

Zresztą nie ważne. Akurat przed chwilą też wpadłem na pomysł, by zrobić to wskaźnikami, ale rano się tym zajmę.


edytowany 1x, ostatnio: cichociemny, 2012-04-06 00:00

Pozostało 580 znaków

2012-04-06 07:29
0

pewnie chodzi o metodę wirtualną.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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