Car*_*arl 1 c++ operator-overloading
原谅一些看起来很简单的问题,但我想到了这个用例:
struct fraction {
fraction( size_t num, size_t denom ) :
numerator( num ), denominator( denom )
{};
size_t numerator;
size_t denominator;
};
Run Code Online (Sandbox Code Playgroud)
我想做的是使用如下语句:
fraction f(3,5);
...
double v = f;
Run Code Online (Sandbox Code Playgroud)
有v现持有我的分数所代表的价值.我将如何在C++中执行此操作?
一种方法是定义转换运算符:
struct fraction
{
size_t numerator;
size_t denominator;
operator float() const
{
return ((float)numerator)/denominator;
}
};
Run Code Online (Sandbox Code Playgroud)
大多数人不愿意将隐式转换运算符定义为样式.这是因为转换操作符倾向于"幕后",并且很难判断正在使用哪些转换.
struct fraction
{
size_t numerator;
size_t denominator;
float as_float() const
{
return ((float)numerator)/denominator;
}
};
Run Code Online (Sandbox Code Playgroud)
在此版本中,您将调用该as_float方法以获得相同的结果.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |