这是不好的做法还是正常的?

时间:2013-12-15 20:51:59

标签: c++ class pointers scope global

比方说,我有两个班。

我知道一种方法是在构造函数中传递指向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;
}

2 个答案:

答案 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”表示依赖于流的类,那么您正在做的事情是有意义的。这一切都将取决于你在这里想要完成的事情。