gpt4 book ai didi

c++ - 为什么友元函数不能访问继承类的私有(private)变量?

转载 作者:行者123 更新时间:2023-11-30 02:20:57 27 4
gpt4 key购买 nike

难道 friend 函数不应该访问 Base 类和 Derived 类中的所有内容吗? class Derived: public Base -> Baseprivate 中的所有内容现在在派生类中都是 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); 只是该类的友元函数,它只能访问 的私有(private)成员仅派生 类但不允许访问基类的任何私有(private)或 protected 成员。同样,即使从派生类中,您也无法访问基类的私有(private)成员,而只能访问公共(public)成员和 protected 成员。要到达/访问基类的私有(private)成员,您必须使用基类的公共(public)成员函数。

C++中有两种继承

class B{};
class D:public B{};

我上面提到的所有内容都适用于上述情况。即使您将 B 基类作为派生类 D 的公共(public)类,所有私有(private)成员都作为私有(private)成员将 D 类作为私有(private)成员,将 protected 成员作为 protected 成员和公开一样公开。

但是,如果您像下面那样将 Base 类的所有成员设为私有(private),那么现在对 Derieve 类来说都是私有(private)的。

  class B{};
class D:private B{};

在这种情况下,友元函数甚至不能访问基类 B 的任何成员。

关于c++ - 为什么友元函数不能访问继承类的私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182640/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com