比方说,我有两个班。
我知道一种方法是在构造函数中传递指向Foo对象的指针,然后在Object中使用它,但这是处理事物的好方法吗?
还有其他更合适的东西吗? 感谢。
class Object
{
private: //etc
public:
void doStuff()
{
//access the foo object (x) created in main.
}
};
class Foo
{
private: //etc
public:
void function()
{
Object * obj = new Object();
obj->doStuff();
}
};
int main(int args, char**argv)
{
Foo * x = new Foo();
x->function();
return 0;
}
答案 0 :(得分:0)
这取决于你必须做什么。 如果你的doStuff()方法必须知道给定对象的内容,则不能使用这种方式。否则,如果你像发布的例子一样,你的doStuff方法只是创建一个对象来执行内部操作,你可以使用这种方法。
通常,没有更好或更差的操作方式。它总是取决于。
一个例子。 你的doStuff方法需要来自外部的东西来做某事:
class Foo
{
private: //etc
public:
void function(Object* obj)
{
obj->doStuffWithTheGivenObject();
}
};
}
你的doStuff方法不需要外部: Foo级 { private:// etc
public:
void function()
{
Object* obj = new Object();
obj->doStuffModifyingTheGivenObject();
this->doStuffOnThisFooObjectWithTheJustCreatedObject(obj);
}
};
}
在第二种情况下,你的Foo对象不需要Object,因为它可以独立地创建一个对象,以便在内部使用它。 在第一种情况下,它正在等待一个Object,因为它使用那个来做某事。
差异在于:“我需要一个对象,还是我可以在内部创建它?”
答案 1 :(得分:0)
这可能有助于了解“Foo”和“Object”究竟是什么。如果“对象”实际上是“水果”而“富”是“苹果”而不是继承有意义。或者,如果“Object”表示某种流,而“Foo”表示依赖于流的类,那么您正在做的事情是有意义的。这一切都将取决于你在这里想要完成的事情。