簡體   English   中英

C++ 兩個雙打的重載 operator%

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM