为什么友元函数无法访问继承类的私有变量?
Why can't a friend function access the private variables of an inherited class?
friend
函数不是应该访问Base
类和Derived
类中的所有内容吗?class Derived: public Base
->Base
中private
的所有内容现在都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);
}
Derived
类的友元函数void friend SetX(Derived &d);
只是该类的友元函数,它只能访问Derived
类的私有成员,但不允许访问基类的任何私有或受保护成员。此外,即使从 Derieve 类中,您也无法访问基类的私有成员,而只能访问公共成员和受保护成员。要访问/访问基类的私有成员,您必须使用基类的公共成员函数。
C++有两种类型的继承
class B{};
class D:public B{};
我上面提到的所有内容都适用于上述情况。即使你B
阶级作为公共的Derieve类D
所有私人成员inharite到DerieveD
作为私人,受保护的成员作为受保护和公共的
。但是,如果你像下面这样私有,那么基础类的所有成员现在都将是Derieve类的私有。
class B{};
class D:private B{};
在这种情况下,友元函数甚至无法访问基类B
的任何成员。
friend
函数不是应该访问类和类Base
Derived
中的所有内容吗?
不。它是Derived
的朋友,所以它应该访问Derived
类可以访问的所有内容。
class Derived: public Base
->Base
中private
中的所有内容现在都public
派生的类中。
不。以前在Base
private
的一切,现在仍然是private
.
使用public
/protected
/private
进行继承意味着与成员访问控制不同。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 如何从另一个文件继承私有成员变量和公共函数
- 继承时如何构建派生类的变量?
- 在类中继承静态变量?
- 打印所有继承的类成员变量和方法
- 如何在复杂继承中访问静态成员变量
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 继承/多态性 - 我是否被迫使用"protected"变量?
- 继承类中的 C++ 成员变量类型重写
- 对象成员变量还是继承
- 继承构造函数和其他变量的解决方法
- std::exception :使用虚函数和继承与变量
- 如何解决多次继承的不明确变量名称?
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 为什么继承的函数会更改基类中的成员变量,而不是与名为它的对象同名的对象
- 变量(继承自基模板类)的偏移量,由具有相同名称的成员遮蔽
- 静态变量继承C++
- 访问受保护的变量 - 继承和子类的复杂情况
- 私有变量继承
- 如何初始化基类中的唯一变量(继承)