我有一个如下所示的课程:
class B;
class A
{
public:
A();
~A();
void createStuff(.......); //??
private:
B *b;
};
对象B包含另一个类'C',它有大约20个类成员变量。
我希望类A的用户能够使用一组参数调用函数createStuff(...),这样我就可以构造对象C.这样做的最佳方法是什么?
答案 0 :(得分:2)
授予访问其私有成员的类的机制称为友谊。
答案 1 :(得分:1)
根据您发布的内容,看起来像这样的东西可能会起作用:
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();
}
答案 2 :(得分:1)
C类变量属于B类;它调解了对C中数据的访问.B类有构造函数;您将使用它们按顺序设置B类变量,确保C正确管理是B的工作。
如果您需要更多地控制C,那么您就遇到了设计问题。你的A类需要它自己的C类变量来控制,或者B类不提供你需要和需要修复的工具,或者你误以为你需要访问变量的内容,从而直接控制变量的内容C级。
德米特定律是这种情景的指南;你似乎想要违反它。
答案 3 :(得分:0)
在任何情况下你都应该看看B类,它如何实现C对象的初始化,是否可以控制(如果不能 - 你应该扩展B类的接口并添加这个功能)?
如果A可以访问C定义,也许你可以用这样的方式使用B的构造函数:
void A::createStuff( const C& c)
{
b = new B(c);
}