是cpp的新手。一般来说,友元函数可以访问类的私有成员和受保护成员,但是当我尝试在派生类中使用友元函数时,我会观察到所需的行为。
class first
{
int a;
};
class second : public first
{
public:
friend void hai ( second );
};
void hai ( second s )
{
printf("%d",s.a); // It says compilation error
}
void main()
{
second s;
hai(s);
}
如果我将 a设为公开 ,则可以正常使用。
有人可以清楚我,为什么我不应该在基础私人范围内访问它。
此致 Prasath S。
答案 0 :(得分:0)
使字段a
受保护,而不是私有。
只能从声明它们的类访问私有字段。
答案 1 :(得分:0)
您的错误在这里:
class first
{
int a;
};
类成员的默认值是私有的,因此您无法从派生类访问它。
私人会员只能从同一个班级访问。这条线
class second : public first
不会将私有成员更改为公开,因此您可以选择将a
保护/公开,还是将公共/受保护的get / set函数添加到first
,这将是管理对a
。
答案 2 :(得分:0)
为什么我不应该在基础私有范围内访问它。
friend
函数可以访问其朋友所在类的private
个成员。
但是在这种情况下,基类中的成员a
默认为private
,因此不会继承到子类。
公共继承需要protected
或子类的成员才能由子类继承。因此,为了让您的示例正常工作,您可以使用protected
成员a
class first
{
protected:
int a;
};
答案 3 :(得分:0)
first::a
在private
中为class first
class second
是从class first
公开派生的,所以:
class first
的所有公开成员都在class second
中公开,可以通过class second
的对象进行访问。 class first
的所有受保护成员均受class second
保护,无法通过class second
的对象访问。class first
中class second
的所有私人成员都无法访问,无法通过class second
的对象访问。因此,您无法通过first::a
的对象访问class second
。
有关详细信息:Can a friend class object access base class private members on a derived class object?
Why can a derived class not access a protected member of its base class through a pointer to base?