是否可以通过重载转换运算符将基本数据类型强制转换为类类型或者我必须重载=c++中的运算符吗
只是为了清除
classname obj;
float f=obj;
正在重载从类到浮点和的类型转换运算符
float f;
classname obj=f;
是从float到class的类型转换。所以我的问题基本上是后一个代码是否正确,是通过重载typecasting还是应该使用重载=运算符。
我知道重载=有效,但我只是想知道是否可以用这种方式重载类型转换运算符。
classname obj; float f=obj;
如果classname
有operator float()
,例如
class classname
{
public:
classname() : value(0.0f) {};
operator float() const {return value;};
private:
float value;
};
而
float f; classname obj=f;
如果classname
具有转换构造函数,例如
class classname
{
public:
classname(float v) : value(x) {};
private:
float value;
};
如果要将现有对象分配给float
,例如
float x;
classname f;
f = x;
需要一个赋值运算符。
class classname
{
public:
classname() : value(0.0f) {};
classname &operator=(float v) {value = v; return *this;}
private:
float value;
};
显然,如果要使用float
构造或分配对象,则类必须同时具有相关的构造函数和相关的赋值运算符。
classname obj=f;
是初始化,那么您可以提供一个使用float
的转换构造函数来支持从float
构造classname
。
例如
class classname {
public:
classname(float) { ... }
...
};