C ++参数化构造函数

时间:2015-11-05 19:26:26

标签: c++ parameterized-constructor

我想知道参数化构造函数应该总是只有参数来实际初始化类'属性。例如,在调用:

Texture background("C:\Documents\Images\background.png");

如果我不需要存储文件路径怎么办?

3 个答案:

答案 0 :(得分:0)

如果您不需要存储路径,则不要将其传递给构造函数! :)

参数化构造函数旨在确保在对象实例化时所有信息都可用。所以只传递必要的信息。

如果你想遵循RAII惯用法,那么将所有重新加入的资源传递给构造函数并释放资源(如果对象锁定它们,如文件或端口)。

答案 1 :(得分:0)

对象构造函数接受返回有效和功能对象所需的任何参数。您可以允许构造函数具有额外的语法糖参数,但至少,您的对象应该是有效的。在你的情况下,如果没有用作纹理的文件,我认为纹理没有意义,所以我认为不建议删除该参数。

请记住,您还应该努力使代码易于测试。在这种情况下,当您想要实例化用于测试特定方法的对象时,复杂的构造函数可能会很痛苦。最后,它更像是一个决策过程。

答案 2 :(得分:0)

我不认为接受一个不直接存储在课堂上的参数有什么不妥。显然,如果它根本不影响课程,那么这只是浪费时间,但你可能接受像PRNG种子这样的东西,你用它来填补你的班级随机状态,没有理由保留种子超过这一点。

但是,传入您在构造函数中访问的文件路径是危险的,因为在该过程中可能会出现任意数量的问题。你真的不想在你的构造函数中遇到麻烦。

在构建器中避免潜在的故障情况时,您最终会将文件访问等内容推迟到构建之后。因此构造函数确实不需要这些信息,因为将它传递给用于访问文件的方法更有意义,在该文件中您可以更轻松地处理错误。