[英]Why can't a friend function access the private variables of an inherited class?
不是friend
函数应该访问Base
类和Derived
类中的所有内容吗? class Derived: public Base
- >一切,是在private
的Base
是现在public
派生的类里面。
class Base
{
private:
int x;
};
class Derived : public Base
{
int y;
public:
void SetY(int value);
void friend SetX(Derived &d);
};
void SetX(Derived &d)
{
d.x = 100; // Why is this a problem?
// Isn't Base supposed to be public now that is inherited?
}
int main()
{
Derived d;
SetX(d);
}
你朋友的功能void friend SetX(Derived &d);
Derived
类只是该类的友元函数,它只能访问Derived
类的私有成员,但不允许访问Base类的任何私有或受保护成员。 即使是Derieve类,您也无法访问Base类的私有成员,但只能访问public和protected成员。 要访问/访问Base类的私有成员,您必须使用基类的公共成员函数。
C ++中有两种类型的继承
class B{};
class D:public B{};
我在上面提到的所有内容都适用于上述情况。 即使你inharite基B
类作为公众一个Derieve类D
所有的私有成员inharites到Derieve D
为私有,保护成员的保护,公众公开。
但是如果你像下面那样私有地使用,那么Base类的所有成员现在都将成为Derieve类的私有成员。
class B{};
class D:private B{};
在这种情况下,友元函数甚至无法访问Base类B
任何成员。
不是
friend
函数应该访问Base
类和Derived
类中的所有内容吗?
不。它是Derived
的朋友,所以它应该访问Derived
类可以访问的所有内容。
class Derived: public Base
- >一切,是在private
的Base
是现在public
派生的类里面。
不。之前在Base
private
Base
仍然是private
。
使用public
/ protected
/ private
进行继承意味着与成员访问控制不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.