2017-04-15 61 views
0

比方说,我有一个类箱基于用户输入如何创建对象

class Box{ 
    ... 
}; 

,我需要创建一个基于用户的输入框。我试图让一个Blueprint对象

方法1:

int main(){ 
    Box box; //Blueprint 
    vector<Box> boxes; 
    for(int i = 0; i < 5; i++) //Creates 5 boxes 
     boxes.push_back(box); 

    return 0; 
} 

这工作。它创建一个包含5个框对象的Vector。 但后来我试着做以下,所以我可以设置值的每次我创建一个对象与构造

方法2:

int main(){ 
    vector<Box> boxes; 

    for(int i = 0; i < 5; i++){ //Creates 5 boxes 
     //Lets assume we input x and y every time 
     Box box(x, y); 
     boxes.push_back(box); 
    } 

    return 0; 
} 

这似乎是工作得很好,当使用boxes[i].x它给我的x值,因为它应该。请注意,x和y是公开而不是私人为简化示例。

我看到this后,用户帕特里克解释了如何创建动态使用大量类的命名盒例如工厂对象,我不明白,你必须把它复杂所以不是很多使用的一个我在这篇文章中尝试了两种方法并为我工作。

我的问题是:

  1. 是我的方法,使基于用户输入
  2. 如果是的,这是我的方法之一是最好的出了两
  3. 对象的正确方法是什么从其他岗位

我提出的原程序有一个名为AI类我的方式和帕特里克之间的区别,我想麦e更多这个类的对象基于用户想要对抗多少AI。

+0

这些是不同的方法:第一个复制同一个对象,第二个创建新的,可能不同的对象。而且,只有第二种方法接受用户输入。 – ForceBru

+0

这就是为什么我第一种方法并不“开心”,并创建了第二种方法,但我不是一个好的程序员,而且我创建了他们,我不知道这是否是正确的方式 – Christina

+0

两者都很好。如果您想稍微改进第二个,请考虑使用emplace_back以避免每次都复制对象:'盒子。emplace_back(x,y);' – ehudt

回答

0

对象工厂是时间的主要部分,用于从用户输入中创建不同的对象。

想象一下,您有一个名为Animal的类。你有3个孩子班:猫,狗和鱼。正如我所说,这些类都是从Animal继承而来的。你想创建一只猫,一只狗或一条鱼,以取决于用户的输入。在这种情况下,Object Factory是非常有用的。在你的情况下,这不是因为你总是实例化一个盒子对象

你这样做的方式很好。当时您不需要像对象工厂那样更复杂的东西。