如果一个类的构造函数中的参数在声明其对象时无法获得怎么办?
类似一种约束,比如我认为一个文件类必须要一个文件名作为其构造参数。
在java中 我可以为其赋值为null,再在适当的时候对其进行初始化。
在C++中应该怎么做?
多写几个构造函数,参数类型也就那几个。
使用默认构造函数,给个你认为的合适的值,比如0或者NULL
public consFun(File *flie=null,int a=0;float b=0.0f);
在声明构造函数时给默认值能有效防止参数缺失引起的错误
出现楼主说的那种情况,如果是自己编制的类,那就要看看类封装的可能不合适;
如果是第三方库提供的类,那还需要仔细理解这个类的使用场景。
C++跟java差不多的也是
如果是文件类的话文件名可以建立一个private
m_filepath=nullptr;
可以写一个
public的open的函数利用m_filepath打开文件;
构造的时候可以直接带参数构造+打开
比如
CFile(std::string filename)
{
open();
}
也可以先创建一个类用默认构造函数,不进行open操作
等适当的时候赋值给m_filepath时再进行open。
回答好像修改不了啊 上面漏了初始化列表,把m_filepath初始化
CFile(std::string filename):m_filepath(filename)
{
open();
}
void fun(int n = 0)
{
printf("fun \n");
}
void fun1(int n,int m = 0)
{
printf("fun1 %d \n",n);
}
int main()
{
fun();
fun1(10);
return 0;
}
“如何优雅地判断数据成员对象(指针)是否可用”?
不妨参考 CComPtr / CComPtrBase 智能指针模板类!
它们将原始COM指针封装为内部数据成员,重载构造函数、重载操作符,自动完成COM指针的释放清空等任务。
具体来说,CComPtrBase::operator ! () 操作符重载,就是判断内部COM指针对象是否为空。
模仿创建对象指针封装模板类,等于增加了一个中间层次,该模板类比较通用。