对一个【类】传递参数,在什么地方传递给她比较好?
时间: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】?
【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.
回到你的疑问,你可以不需要在构造函数里面判断文件的合理性,可以在使用的时候再Check也是可以的,或者做判断,然后保存一个失败的ID,到时候用户使用的时候返回告诉用户即可.
如果你要用第一种方法最好要提供Default constructor & SetPath() APIs.
作者: yuucyf 发布时间: 2011-11-27
个人觉得构造中传不太好,如果它是成员呢?
作者: xuddk727 发布时间: 2011-11-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28