继承和受保护的属性

时间:2014-11-21 10:03:09

标签: c++ xcode4

我正在编写以下结构:

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 :: derivative'马上。我的两个第一行是:

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。 我无法理解为什么在“T' T”中继续使用“F'”时我无法访问它。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

由于受保护的成员只能访问(Sub Class)T(此处)(因为只有来自基础F的derievedd类)。访问i(受保护的成员)实例化T并使用i。 将此更改为

F* deriv;
T* deriv;

你的错误就消失了。