从基本数据类型到用户定义类型的类型转换

时间:2020-02-28 04:12:59

标签: c++ casting type-conversion operator-overloading

是否可以通过重载转换运算符来将基本数据类型转换为类类型 还是我必须在c ++中重载=运算符

只是要清楚

classname obj;
float f=obj;

正在将类型转换运算符从类重载到float和

float f;
classname obj=f;

是从float到class的类型转换。所以我的问题基本上是后面的代码是正确的,是否可以通过重载类型转换还是应该使用重载=运算符来实现?

我知道重载=是可行的,但我只是想知道是否有可能以这种方式重载类型转换运算符。

2 个答案:

答案 0 :(得分:1)

classname obj=f;是初始化的,然后您可以提供一个float的{​​{3}},以支持从classname构造float

例如

class classname {
public:
    classname(float) { ... }
    ...
};

答案 1 :(得分:1)

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来构造或分配对象,则该类必须同时具有相关的构造函数和相关的赋值运算符。

相关问题