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

0

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

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.

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.

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.

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.

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;
};

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