доступ к защищенному члену базового класса в другом подклассе

Почему это компилируется:

class FooBase
{
protected:
    void fooBase(void);
};

class Foo : public FooBase
{
public:
    void foo(Foo& fooBar)
    {
        fooBar.fooBase();
    }
};

а этого нет?

class FooBase
{
protected:
    void fooBase(void);
};

class Foo : public FooBase
{
public:
    void foo(FooBase& fooBar)
    {
        fooBar.fooBase();
    }
};

С одной стороны, C++ предоставляет доступ к закрытым/защищенным членам для всех экземпляров этого класса, но, с другой стороны, он не предоставляет доступ к защищенным членам базового класса для всех экземпляров подкласса. Это выглядит довольно противоречиво для меня.

Я протестировал компиляцию с помощью VC++ и ideone.com, и оба компилируют первый, но не второй фрагмент кода.

35
задан iammilind 2 August 2016 в 10:23
поделиться