Вчера я столкнулся с ошибкой, и, хотя это легко обойти, я хотел убедиться, что я правильно понимаю C ++.
У меня есть базовый класс с защищенным членом:
class Base
{
protected:
int b;
public:
void DoSomething(const Base& that)
{
b+=that.b;
}
};
Это компилируется и работает просто отлично.Теперь я расширяю Base, но все еще хочу использовать b:
class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
b+=that.b;
d=0;
}
};
Обратите внимание, что в этом случае DoSomething
по-прежнему принимает ссылку на Base
, а не Derived
.Я ожидаю, что у меня все еще может быть доступ к that.b
внутри Derived
, но я получаю ошибку cannot access protected member
(MSVC 8.0 - еще не пробовал gcc).
Очевидно, добавление публичногоgetter на b
решил проблему, но мне было интересно, почему у меня не было доступа напрямую к b
.Мне кажется, что при использовании открытого наследования защищенные переменные все еще видны производному классу.