gpt4 book ai didi

c++ - 类(class)友元——一个谜

转载 作者:可可西里 更新时间:2023-11-01 16:38:51 25 4
gpt4 key购买 nike

我是初学者级别的面向对象编程爱好者。我遇到了以下难题:

class A { 
};

class B {
protected:
friend class A;
};

class C {
public:
friend class B;
};

引用上面的示例代码,假设上面的类都有数据成员,那么在A的成员声明中可以使用C的哪些成员名称?

  1. 仅限私有(private)成员(member)

  2. 仅限 protected 成员

  3. C的所有数据成员

  4. 仅限公共(public)成员(member)

  5. 不是 C 的数据成员*

我的选择是答案 4,因为友元是不可传递的。因此,A 是 B 的 friend ,但 A 不是 C 的 friend (即使 B 是 C 的 friend )。这是正确的想法吗?

另外,我的问题是到目前为止(在教程中)我遇到过这样声明友元的示例:

class X { 
public:
friend class Y;
};

如果我们使用 protected 说明符而不是公共(public)说明符,有什么区别?像那样:

class X { 
protected:
friend class Y;
};

最佳答案

  1. 你是对的。友元不是传递的,也不是继承的。
  2. friend 声明中放置什么访问说明符没有任何区别。

只要类 A 本身没有被声明为类 C 的友元。您不能访问 AC 的任何 protected 或私有(private)成员。

关于c++ - 类(class)友元——一个谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378971/

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