C++访问另一个类的私有结构

C++访问另一个类的私有结构,c++,private,C++,Private,我的课程如下所示: class B; class A { public: A(); ~A(); void createStuff(.......); //?? private: B *b; }; 对象B包含另一个类“C”,它有大约20个类成员变量 我希望类A的用户能够调用函数createStuff。。。使用一组参数,这样我就可以构造对象C。这样做的最佳方式是什么?使用您发布的内容,看起来像这样的东西可能会起作用: class B c

我的课程如下所示:

class B;
class A
{
   public:
       A();
      ~A();
      void createStuff(.......); //??

  private:
      B *b;
};
对象B包含另一个类“C”,它有大约20个类成员变量


我希望类A的用户能够调用函数createStuff。。。使用一组参数,这样我就可以构造对象C。这样做的最佳方式是什么?

使用您发布的内容,看起来像这样的东西可能会起作用:

class B
class A:
{
   public:
       A();
      ~A();
      void ceateStuff(.......); //??

  private:
      B *b
}
void A::createStuff(argument1, argument2...)
{
    C = new C(argument1, argument2...) //You now have an instance of C with the arguments pass in to createStuff();

}

根据您发布的内容,类似这样的内容可能会起作用:

class B
class A:
{
   public:
       A();
      ~A();
      void ceateStuff(.......); //??

  private:
      B *b
}
void A::createStuff(argument1, argument2...)
{
    C = new C(argument1, argument2...) //You now have an instance of C with the arguments pass in to createStuff();

}

类向其私有成员授予访问权限的机制称为友谊。

类向其私有成员授予访问权限的机制称为友谊。

类型C的变量属于类别B;它调解对C中数据的访问。B类有构造函数;您将使用这些来按顺序设置B类变量,B的工作是确保正确管理C类变量

如果您需要更多地控制C,那么您就有一个设计问题。您的类A需要自己的类C变量来控制,或者类B没有提供您需要的工具,或者您错误地认为您需要访问并直接控制类C变量的内容


在这种情况下,德米特定律是一个指南;你似乎想违背它。

类型C的变量属于B类;它调解对C中数据的访问。B类有构造函数;您将使用这些来按顺序设置B类变量,B的工作是确保正确管理C类变量

如果您需要更多地控制C,那么您就有一个设计问题。您的类A需要自己的类C变量来控制,或者类B没有提供您需要的工具,或者您错误地认为您需要访问并直接控制类C变量的内容


在这种情况下,德米特定律是一个指南;您似乎想要违反它。

在任何情况下,您都应该看看B类,它如何实现C对象的初始化,如果不能,它可以被控制吗?您应该扩展B类的接口并添加此功能

如果A可以接受C定义,您可以这样使用B的构造函数:

void A::createStuff( const C& c)
{
    b = new B(c); 
}

在任何情况下,您都应该看看B类,它是如何实现C对象的初始化的,如果不能,它可以被控制吗?您应该扩展B类的接口并添加此功能

如果A可以接受C定义,您可以这样使用B的构造函数:

void A::createStuff( const C& c)
{
    b = new B(c); 
}

是的,这还不是很清楚,我的回答可能是仓促行事。A包含包含C的B。A不能访问C吗?你能说得更清楚一点或者显示更多的代码吗?B的头文件有类CYes的类定义,这不是很清楚,我的答案可能已经跳枪了。A包含包含C的B。A不能访问C吗?你能说得更清楚一点或者显示更多的代码吗?B的头文件有类CThanks Pete的类定义,而C类构造函数有20个参数。我想知道是否有更好的方法不,不是真的。唯一可行的方法是如果A包含可用于创建C的字段。在这种情况下,您只能传递必要的参数并使用A中的字段来创建C,我看到您添加了一条注释,B包含C的定义。如果是这样,那么B和C都应该可以从a访问,并且这个方法应该可以工作。谢谢Pete,但是C类构造函数有20个参数。我想知道是否有更好的方法不,不是真的。唯一可行的方法是如果A包含可用于创建C的字段。在这种情况下,您只能传递必要的参数并使用A中的字段来创建C。我看到您添加了一条注释,其中B包含C的定义。如果是这种情况,那么B和C都应该可以从A访问,并且此方法应该可以工作。