Polymorphism and data hiding: Does a base class override or ignore a derived class' access restrictions?

前端 未结 2 1849
情话喂你
情话喂你 2021-01-14 16:32

Please look at the following code listing:

#include 

using namespace std;

class Base {
public:
    virtual void Message() = 0;
};

class In         


        
2条回答
  •  情话喂你
    2021-01-14 17:08

    In C++, virtual and access specifiers are mutually exclusive. That is the reason why in C++, the access can be narrowed for virtual methods whereas in C# or Java that is not possible.

    When you try to access the virtual function through base class pointer, the compiler compiles the code since the base class' virtual function is public.

    In your commented code, the virtual function having restricted access is called via the Final class pointer. Hence the compilation error.

提交回复
热议问题