继承和受保护的属性
Inheritance and protected attribute
我正在编写以下结构:
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;
你的错误消失了。
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 公共/私有/受保护是否会更改内存中结构的排列?
- 在父类中公开受保护的构造函数
- 如何从其他结构访问受保护的结构变量
- 如何实现返回受保护结构的私有函数
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 从模板化父类中的派生内部类访问受保护的成员变量
- 为什么继承的受保护构造函数不能公开?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- C++中的受保护变量
- 在此上下文中受保护 c++
- 同一模板类但模板类型的受保护成员
- 基类中受保护的纯虚函数如何被基类的友元类使用?
- 使用基类的C++和修改私有/受保护的属性
- C++,无法获取受保护的抽象类属性
- C++可以在运行时设置/更改类属性 - 公共,私有或受保护
- 继承和受保护的属性