We have discussed a similar topic in Java here. Unlike Java, C++ allows to give more restrictive access to derived class methods. For example the following program compiles fine.
In the above program, if we change main() to following, will get compiler error becuase fun() is private in derived class.
What about the below program?
Derived::fun(int x) called
In the above program, private function “Derived::fun(int )” is being called through a base class pointer, the program works fine because fun() is public in base class. Access specifiers are checked at compile time and fun() is public in base class. At run time, only the function corresponding to the pointed object is called and access specifier is not checked. So a private function of derived class is being called through a pointer of base class.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
- Can we access private data members of a class without using a member or a friend function?
- Virtual functions in derived classes
- User defined derived data types in C++
- Catching base and derived classes as exceptions
- Publicly inherit a base class but making some of public method as private
- Access Modifiers in C++
- Difference between fundamental data types and derived data types
- Random-access Iterators in C++
- How to bind to port number less than 1024 with non root access?
- How to convert a class to another class type in C++?
- Can we access global variable if there is a local variable with same name?
- std::any Class in C++
- std:: valarray class in C++
- Array class in C++
- std::string class in C++