【问题标题】:Accessing private struct members of a different class访问不同类的私有结构成员
【发布时间】:2018-05-13 08:24:02
【问题描述】:

您好,我在理解 C++ 中的朋友关键字时遇到了一些麻烦

假设我有一个如下所示的类:

class A
{
private:
    friend class B;
    struct Astruct
    {
        int funVar = 1;
    };
    Astruct myStruct
public:
    changeAStruct(); // changes the value of funVar to 2
};

class B
{
    //how do i here get access to myStruct with the value 2?
};

希望上面的伪代码能告诉你我的问题。我想要 myStruct 的同一个实例,使用 this 指针可以让我进入 B 类的 A 类。我怎样才能实现这一点?

我不想在 B 类中输入这个:

A::Astruct myStruct

因为这会在 B 类中创建一个新结构,并将 funVar 设置为 1。我希望在 A 类中使用相同的结构,但现在在 B 类中......

编辑:我想从 main 我可以将 myStruct 作为参考发送到 B 类并从那里访问它。这是最佳做法吗?

【问题讨论】:

  • 如果您想要指针的功能,请使用指针。
  • this 指的是在B 范围内的B 实例。那么您要操作的其他 A 实例在哪里?
  • 但是那个指针看起来怎么样?简单地输入 A::Astruct *myStruct 并没有真正的帮助
  • 朋友可以访问事物,但不能访问不存在的事物。 B 中的代码可以访问Astruct 类型。 B 中具有 A 实例的代码可以访问该 A 实例的 myStruct 属性。但是A 类本身没有myStruct,因此B 代码没有任何访问权限。
  • “没有帮助” - 为什么不呢?如果你尝试它会出现什么问题?我们可能需要更多的上下文来回答这个问题......

标签: c++ class friend


【解决方案1】:

我不确定你想要什么,但你可以这样做:

class A
{
private:
    friend class B;
    struct Astruct
    {
        int funVar = 1;
    };
    Astruct myStruct;
};

class B
{
public:
    int getFunVar(A &a)
    {
        return a.myStruct.funVar;
    }
};

【讨论】:

  • 好吧,这差不多就是这样,我需要 B 类中的结构与 A 类中的结构相同。A 类更改结构,然后将其转移到 B 类
  • 实际上,我最想知道的是,是否可以在不必调用 getFunVar 的情况下进行示例?我可以在 B 类中以某种方式在没有函数调用的情况下获得 funVar 吗?
  • @mrmagin • a.myStruct.funVar 在没有函数调用的情况下得到funVar。所以,是的,这是可能的。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2012-12-20
相关资源
最近更新 更多