原谅一些看起来很简单的问题,但我记得这个用例:
struct fraction {
fraction( size_t num, size_t denom ) :
numerator( num ), denominator( denom )
{};
size_t numerator;
size_t denominator;
};
我想做的是使用如下语句:
fraction f(3,5);
...
double v = f;
让v
现在保持我的分数代表的值。
我将如何在C ++中执行此操作?
答案 0 :(得分:7)
执行此操作的一种方法是定义转换运算符:
struct fraction
{
size_t numerator;
size_t denominator;
operator float() const
{
return ((float)numerator)/denominator;
}
};
大多数人不愿意将隐式转换运算符定义为样式。这是因为转换操作符倾向于“幕后”,并且很难判断正在使用哪些转换。
struct fraction
{
size_t numerator;
size_t denominator;
float as_float() const
{
return ((float)numerator)/denominator;
}
};
在此版本中,您可以调用as_float
方法来获得相同的结果。
答案 1 :(得分:3)
赋值运算符和转换构造函数用于从其他类的对象初始化 类的对象。您需要一种方法来使用类的对象初始化其他类型的对象。这就是转换运算符的用途:
struct fraction {
//other members here...
operator double() const { return (double)numerator / denominator;}
//other members here...
};
答案 2 :(得分:2)
您可以使用operator double进行转换:
struct fraction
{
operator double() const
{
//remember to check for denominator to 0
return (double)numerator/denominator;
}
};
答案 3 :(得分:1)
operator=
与此无关,而是您希望向struct
公众operator double
添加以下内容:
operator double() {
return ((double) numerator))/denominator;
}
答案 4 :(得分:0)
由于编译器没有如何将struct fraction转换为double,因此编译器会出现错误。如果要提供转换,则必须定义编译器将用于此转换的operator double()
。