Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania
Viewing all articles
Browse latest Browse all 65225

Dostęp do metod wirtualnych

$
0
0

Witam, ostatnio zastanawiałem się trochę nad hermetyzacją metod wirtualnych. Czytając trochę zagranicznych stron, w większości znajdowałem odpowiedź, że dobrze jest metody wirtualne opatrzyć dostępem private lub protected. Okej - problem pojawia się natomiast w wywołaniu metody wirtualnej klasy pochodnej poprzez wskaźnik do obiektu klasy bazowej. Jeśli metoda jest private/protected w klasie bazowej, to kompilator "zaprotestuje", pomimo, że metoda w klasie pochodnej jest public. Wiem mniej więcej jak działa kompilator w tym przypadku, jednak nie widzę rozwiązania takiej sytuacji (oprócz nadania dostępu public, co uważam za niezbyt dobry pomysł). Czy są wówczas jakieś sposoby na osiągniecie danego celu? Czy może hermetyzacja metod wirtualnych rządzi się innymi prawami?

Przykładowy kod:

#include <iostream>
using namespace std;
class A
{
    private:
    virtual void funkcja() 
	{
        cout<<"A::funkcja wywolane"<<endl;
    }
    
};
class B:public A
{	
	public:
    void funkcja() {
        cout<<"B::funkcja wywolane"<<endl;
    }
};
int main()
{
    A *a = new B();
    a->funkcja(); //kompilator "mysli" ze ma to byc funkcja z klasy A

    return 0;
}

 


Viewing all articles
Browse latest Browse all 65225

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>