用于两个double的重载操作符%
C++ Overload operator% for two doubles
是否有可能超载operator%
为两个双?
const double operator%(const double& lhs, const double& rhs)
{
return fmod(lhs, rhs);
}
当然,这会产生一个错误,因为两个形参中必须有一个具有类类型。因此,我考虑利用c++的隐式构造函数调用的可能性来解决这个问题。我是这样做的:
class MyDouble {
public:
MyDouble(double val) : val_(val) {}
~MyDouble() {}
double val() const { return val_; }
private:
double val_;
};
const double operator%(const MyDouble& lhs, const double& rhs)
{
return fmod(lhs.val(), rhs);
}
const double operator%(const double& lhs, const MyDouble& rhs)
{
return fmod(lhs, rhs.val());
}
…和:
double a = 15.3;
double b = 6.7;
double res = a % b; // hopefully calling operator%(const MyDouble&, const double) using a implicit constructor call
不幸的是,这不起作用!任何提示,想法,…是欣赏!提前感谢,乔纳斯
这不起作用的原因是,只有当表达式的至少一个操作数具有类或枚举类型时,才触发用户定义的操作符函数的重载解析。
所以你运气不好。这行不通。
我认为你可以尝试的最好的是等待一个c++ 0x编译器,而不是写3.14
,你写3.14_myd
,作为一个用户定义的文字。
或者实现double MyDouble::operator%(const double&) const;
,如下所示:
#include <iostream>
#include <cmath>
class t_double {
public:
t_double(const double& val) : d_val(val) {
}
t_double(const t_double& other) : d_val(other.d_val) {
}
~t_double() {
}
const double& val() const {
return this->d_val;
}
double operator%(const double& rhs) const {
return fmod(this->val(), rhs);
}
double operator%(const t_double& rhs) const {
return fmod(this->val(), rhs.val());
}
private:
double d_val;
};
int main(int argc, char* const argv[]) {
const t_double a(15.3);
const t_double b(6.7);
std::cout << a % b << " == " << a.val() << " % " << b.val() << "n";
return 0;
}
相关文章:
- 重载操作符+:表达式必须是整型或无作用域枚举类型
- 重载操作符
- 如何重载操作符==外模板类使用友元函数
- 重载*操作符,使其在左右两边都工作
- 重载操作符<对于非随机迭代器
- 在c++中重载操作符的时间和原因
- 如何在c++中重载=操作符来通过引用进行复制
- 如何在c++中获取定义为友元的重载操作符的地址
- 使用重载操作符的文件操作表达式没有给出预期的结果
- 重载操作符()
- 重载操作符()并在类内使用
- 类中的重载操作符+
- 定时使用重载操作符
- c++带类的重载操作符
- 用列表容器重载[]操作符
- 重载操作符=
- 任何重载操作符()的静态检测
- 重载操作符以处理类对象
- 在使用另一个类的类中重载操作符==
- 派生类和基类中的重载操作符不同