继承和受保护的属性

Inheritance and protected attribute

本文关键字:属性 受保护 继承      更新时间:2023-10-16

我正在编写以下结构:

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::d erivative"。我的前两行是:

F* T::derivative()const
{
    F* deriv;
    deriv->i=clone();
}
F* T::clone()const
{
    return new T(n);
}

但是Xcode告诉我"T::d erivative"中的第二行'i' is a protected member of 'F。我不明白为什么当我在继承自"F"的"T"中时我无法访问它。

T 的成员只能访问类 T 的对象(包括 currect 对象)的受保护成员,而不能访问类 F 或其他子类型的任意对象。

无论deriv应该是什么(目前,它是一个未初始化的指针,所以即使代码确实编译了,你也会遇到大问题),它都必须T*(或T的子类型)才能通过它访问i。要么这样,要么i需要更广泛地访问。

由于受保护的成员只能访问(子类)T(这里)(因为只有来自基数F的derievedd类)。要访问 i(受保护成员),请实例化 T 并使用 i .这里将其更改为

F* deriv;
T* deriv;

你的错误消失了。