Prawa dostępu do metody przeciążonej w klasie bazowej

Odpowiedz Nowy wątek
2012-08-28 16:29
0

Witam. Metoda moze byc przeciazona w klasie (redefining tzw). Jakie są wtedy prawa dostepu do metody w klasie bazowej?

Pozostało 580 znaków

2012-08-28 16:34
Rev
0

Metoda przeciążona (overloaded) to taka, która dzieli z inną metodą nazwę, ale różnią je parametry.
Metoda przedefiniowana (redefined) to metoda, która dzieli nazwę z metodą niewirtualną z klasy bazowej.

O którą ci chodzi? Nie wiem czy do końca rozumiem o co chodzi w tych prawach dostępu do metody (której?) w klasie bazowej. Rzuć jakimś kodem najlepiej.


edytowany 1x, ostatnio: Rev, 2012-08-28 16:36

Pozostało 580 znaków

2012-08-28 16:49
0

Chodzi o metodę przedefiniowaną (redefined) zarówno w pierwszym jak i drugim pytaniu. Kodem nie sypnę bo do końca tego nie rozumiem, a pytanie wzięło się z egzaminu.

Pozostaje zapytać co egzaminator maił na myśli bo ja nie mam pojęcia :] - Hostel 2012-08-28 20:10

Pozostało 580 znaków

2012-08-29 09:41
0

Ja też nie rozumiem pytania.

Może tu chodzi o nie o prawa a sposób dostępu do metody z klasy bazowej przesłoniętej (przedefiniowanej) przez metodę w klasie pochodnej (stąd ta bazowa w pytaniu)?

Moim zdanie prawa dostępu do metody zależą od specyfikatora dostępu użytego w klasie do tej metody.

Ogólne biorąc funkcje (w tym metody) mogą być przeciążane w tym samym zakresie widoczności (zasięgu). Czy to jest redefining? Pasuje overloading. Ponieważ zasięg dla metod ogranicza się do jednej klasy. Jednak w pytaniu jest jak jest.

Pozostało 580 znaków

2012-08-29 15:12
0

Aby odnieść się do zasłoniętej(przedefiniowanej) metody z klasy bazowej w klasie pochodnej należy podać kwalifikator zakresu. Np:

class bazowa
{
void metoda(void)
{
//kod funkcji "metoda" z klasy bazowej
}
};
class pochodna
{
void metoda(void) // to jest przesłonięta funkcja(ma taką samą nazwę) od tej z klasy bazowej
{
bazowa::metoda(); //wywołujemy funkcje składową z klasy podstawowej(bazowej)
// tutaj kod funckji "metoda" z klasy pochodnej
}
};

jak widać w klasie pochodnej możemy wywołać funkcję z klasy podstawowej która będzie mogła zmieniać prywatne pola(dane składowe) z klasy bazowej. Z klasy pochodnej nie możemy manipulować prywatnymi polami od klasy bazowej nawet jeśli by zrobiliśmy dziedziczenie publiczne. Prywatność danych klas zawsze musi być zawsze zachowana.


Nie odpowiadam na PW z prośbą o pomoc programistyczną.
edytowany 1x, ostatnio: robcio, 2012-08-29 15:17

Pozostało 580 znaków

2012-08-29 20:28
0
robcio napisał(a):

Prywatność danych klas zawsze musi być zawsze zachowana.

no chyba, że private to nie private ;)

#define private public
class A {
    private:
        int a;
};

class B : public A {
    void foo() { a = 2; }
};

jednak dalej lipa dla:

class A {
        int a;
};

"..."
"odp"
"qtMaster"

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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