Я пишу следующую структуру:Наследование и защищенный атрибут
class F {
protected:
F* i;
public:
F(){i=NULL;}
virtual F* clone()const=0;
virtual double operator()(double x)const=0;
virtual F* derivative()const=0;
virtual double inverse(double y)const=0;
virtual ~F(){}
};
class T : public F{
string n;
public:
T(string n_);
F* clone()const;
double operator()(double x)const;
F* derivative()const;
double inverse(double y)const;
~T(){}
};
Я пишу метод «T :: производной» прямо сейчас. две мои первые строки являются:
F* T::derivative()const
{
F* deriv;
deriv->i=clone();
}
F* T::clone()const
{
return new T(n);
}
но Xcode рассказывает мне на второй линии в «T :: производной», что 'i' is a protected member of 'F
. Я не могу понять, почему у меня нет доступа к нему, когда я нахожусь в «Т», который наследуется от «F».
Это не связано с тем, чтобы быть абстрактным. В этом контексте вы можете получить доступ к открытым членам абстрактного типа; просто не закрытые члены или защищенные члены посредством указателей на типы, отличные от 'T', из-за правил доступа для всех классов (абстрактные или иные). –