+ -
当前位置:首页 → 问答吧 → 对一个【类】传递参数,在什么地方传递给她比较好?

对一个【类】传递参数,在什么地方传递给她比较好?

时间:2011-11-27

来源:互联网

比如,我新建了一个类,名称为CReadIMG,用于读取后缀为IMG格式的图像数据。所以,必须将IMG文件名称传递给她。但是问题来了,你说我是在构造函数里传递给她好?还是在需要用到文件名的成员函数里传递给这个类好?
【1】如果在构造函数里传递给她:
class CReadImg
{
public:
CReadImg(const char *ImgFile);
virtual ~CReadImg();
Doprocess();
... ...
}
【2】如果在成员函数里传递给她:
class CReadImg
{
public:
CReadImg();
virtual ~CReadImg();
Doprocess(const char *ImgFile);
... ...
}

我个人认为方法【1】好一些,因为新建该类对象肯定少不了文件名,这样符合逻辑。实际上我采用的也是该方法。
但是遇到了一个问题:
在构造函数CReadImg(const char *ImgFile)里需要进行一些判断,比如,文件是否存在、IMG文件内部格式是否符合要求等等,这样,一旦不符合要求,就得终止,那么总不能在构造函数里写 return或者return false吧?

针对方法【1】的问题,各位大侠有什么好的解决办法?难道我要重新改为方法【2】?

作者: hanbing6174   发布时间: 2011-11-27

看你习惯把,都可以,我觉得第二种方法好。对于文件的判断,这有什么问题,完全可以用个成员变量保存文件是否成功载入,不必必须用返回值判断把。

作者: bluekitty   发布时间: 2011-11-27

两种都可以,但是如果用第一种的话最好要提供一个类似SetPath()的函数,因为用户用该实例的时候可能会更改文件名,如果不提供的话那势必会造成这样的问题,用户新建一个实例后,如果想再更改文件名必须要另外一个实例才能办到,这样不合理.

回到你的疑问,你可以不需要在构造函数里面判断文件的合理性,可以在使用的时候再Check也是可以的,或者做判断,然后保存一个失败的ID,到时候用户使用的时候返回告诉用户即可.
如果你要用第一种方法最好要提供Default constructor & SetPath() APIs.

作者: yuucyf   发布时间: 2011-11-27

个人觉得构造中传不太好,如果它是成员呢?

作者: xuddk727   发布时间: 2011-11-27