搜尋

首頁  >  問答  >  主體

c++ - 友元函数运算符重载参数表中如何写多个参数一起进行操作

PHP中文网PHP中文网2804 天前592

全部回覆(1)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 13:48:26

    一般不會(a + b).area(); 這樣調用,用起來不自然。
    而是會實現類似下面的一個重載函數

        friend ostream &operator<<(ostream &os, const Triangle &b) {
            float s, area;
            s = (b.x + b.y + b.z) / 2;
            area = sqrt(s * (s - b.x) * (s - b.y) * (s - b.z));
    //        cout << "area is " << area << endl;
            os << "area is " << area <<endl;
            return os;
        }
        

    這樣,列印的時候只要 cout << a + b << endl;即可
    程式碼稍微改了下,具體的演算法沒看,

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    class Triangle {
    private:
    
        int x, y, z;
    public:
    
        Triangle() { }
    
        void area() {
            float s, area;
            s = (x + y + z) / 2;
            area = sqrt(s * (s - x) * (s - y) * (s - z));
            cout << "area is " << area << endl;
        }
    
        friend ostream &operator<<(ostream &os, const Triangle &b) {
            float s, area;
            s = (b.x + b.y + b.z) / 2;
            area = sqrt(s * (s - b.x) * (s - b.y) * (s - b.z));
    //        cout << "area is " << area << endl;
            os << "area is " << area <<endl;
            return os;
        }
    
        friend Triangle operator+(Triangle left, Triangle right) {
            Triangle b;
            b.x = left.x + right.x;
            b.y = left.y + right.y;
            b.z = left.z + right.z;
            return b;
        }
    
        void input() {
            cin >> x >> y >> z;
        }
    
        void output() {
            cout << "triangle three horizon length is " << x << "  " << y << "  " << z << endl;
        }
    };
    
    int main() {
    
        Triangle a, b, c;
        a.input();
        b.input();
        c.input();
        (a + b).output();
    //    (a + b).area();
        cout << a + b + c <<endl;
        return 0;
    }      
      
      

    PS:
    我更新了下,這裡其實沒必要用友元函數,直接如下用就行

    Triangle operator+(Triangle other)
    {

    Triangle ret;
    ret.x = this->x + other.x;
    ret.y = this->y + other.y;
    ret.z = this->z + other.z;
    return ret;

    }

    你用friend來處理的話,回傳值也是一個Triangle,可以遞歸的再去加另外一個Triangle,就實現多個Triangle連加的形式

    回覆
    0
  • 取消回覆