构造函数应该接受参数还是应该创建setter?

cor*_*zza 16 c++ oop class

我有两个选择.要么创建一个在其构造函数中接受大量参数的类,要么创建许多setter方法和init方法.我不确定哪个是首选选项,是否应该在构造函数中接受一些参数,而其他参数可以通过setter手动设置?还是我过度思考这个?

这是一个相关的问题,我也是:成员名和构造函数参数名之间的冲突.

Luc*_*ore 26

如果你创建一个对象后你必须打电话setinit实际使用它...好吧,那只是一个糟糕的设计.

如果对象可用而没有按照您希望的方式初始化某些成员,则可以稍后进行设置.

这里的黄金法则是 - 如果您创建一个对象,您应该能够使用它而无需进行任何其他类型的初始化.

扩大答案:

假设您的形状有10个边,10个角,颜色和名称,可以连接到不同的形状.构造函数应该如下所示:

 MyShape(Point c1, Point c2,...., Point c10, Color c, Name n)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我省略了连接的形状,因为NULL如果当前对象未连接,它可以合理地设置.但是,在没有任何其他参数的情况下,该对象无效,因此应在构造函数中设置它们.

可能的重载(可选地,默认参数)可以是:

 MyShape(Point c1, Point c2,...., Point c10, Color c, Name n, 
                                      MyShape* connectedShape /*=NULL*/)
Run Code Online (Sandbox Code Playgroud)

  • @Bane:记住你也可以有几个构造函数,如果你有一个可以从几个不同的参数集中设置的对象. (3认同)