[英]C++ Overload operator% for two doubles
是否可以為兩個雙打重載operator%
?
const double operator%(const double& lhs, const double& rhs)
{
return fmod(lhs, rhs);
}
當然,這會產生錯誤,因為兩個參數之一必須具有 class 類型。 所以我考慮利用隱式構造函數調用 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
不幸的是,這不起作用,任何提示,想法。 ..,不勝感激! 在此先感謝,喬納斯
這不起作用的原因是,只有當表達式的至少一個操作數具有 class 或枚舉類型時,才會觸發用戶定義的運算符函數的重載決議。
所以你運氣不好。 這行不通。
我認為您可以嘗試的最好的方法是等待 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.