你认为多个初始化步骤"形式不好"吗?

Con*_*ser 5 c++ oop

我正在用C++编写一个物理模拟(Ising模型),它在方格上运行.我的程序的核心是我的Ising类,它带有一个构造函数,用于调用晶格的行和列尺寸.我还有另外两种方法来设置系统的其他参数(温度和初始状态),在进化系统之前必须调用它们!因此,例如,示例程序可能如下所示

int main() {
    Ising system(30, 30);
    system.set_state(up);
    system.set_temperature(2);

    for(int t = 0; t < 1000; t++) {
        system.step();
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果在system.step()之前未调用system.set _*()方法,则system.step()会引发异常,提醒用户注意该问题.我用这种方式实现它来简化我的构造函数; 这是不好的做法吗?

Pét*_*rök 13

建议尽可能将所有必需参数放在构造函数中(当然有例外,但这些应该是罕见的 - 到目前为止我已经看到了一个真实的例子).这样您就可以更轻松,更安全地使用您的课程.

另请注意,通过简化构造函数,您可以使客户端代码更复杂,哪种IMO是一个不好的权衡.构造函数只编写一次,但调用者代码可能需要写入多次(增加了要写入的大量代码和错误的可能性).

  • +1.请注意,构造函数只实现一次,但可以从许多不同的位置调用,从而增加了出错的概率. (2认同)