C++ 为对象赋值为空的替代操作

如果一个类的构造函数中的参数在声明其对象时无法获得怎么办?
类似一种约束,比如我认为一个文件类必须要一个文件名作为其构造参数。
在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指针对象是否为空。

模仿创建对象指针封装模板类,等于增加了一个中间层次,该模板类比较通用。