C++-類的操作符(+)重寫


使用const Complex operator + (const Complex &c ) const {} 重新定義類的+操作

#include<iostream>

using namespace std; 

class Complex{
public:
    Complex(int r, int i):m_r(r),m_i(i){} 
    void print(void){
        cout << m_r << endl; 
        cout << m_i << endl; 
    }
    const Complex operator + (const Complex& c) const     {
        Complex res(m_r + c.m_r, m_i + c.m_i); 
        return res; 
    }    

private:
    int m_r; 
    int m_i; 

}; 

int main() {
    Complex c1(1, 2); 
    Complex c2(2, 3); 
    Complex c3 = c1 + c2; 
    c3.print(); 
}

 使用friend const Complex 來定義外函數

#include <iostream>
#include <cstdio>


using namespace std; 


class Complex{
public:
    Complex(int t, int r):m_r(r), m_t(t) {}
    void print(void) const {
        cout << m_r << "+" << m_t << endl; 
    }
    //成員函數 
    //1)修飾返回結果,禁止對表達式再賦值
    //2)常引用參數,支持常量型右操作數
    //3)常函數,支持常量型左操作數
    const Complex operator+(const Complex& c) const {
        Complex res(m_r + c.m_r, m_t + c.m_t); 
        return res; 
    }
private:
    friend const Complex operator-(const Complex & l, const Complex &r); 
    int m_r; 
    int m_t; 
}; 

const Complex operator-(const Complex &l, const Complex &r){
    Complex res(l.m_r - r.m_r, l.m_t - r.m_t); 
    return res; 
}

int main(void) {
    const Complex c1(1, 2); 
    const Complex c2(2, 3); 
    c1.print(); 
    c2.print();  
    
    Complex c3 = c1 + c2; 
    c3.print(); 
    
    Complex c4 = c1 - c2; 
    c4.print(); 

    
    return 0; 
}

使用operator += 來定義 c1 += c2 函數

#include <iostream>
using namespace std; 


class Complex {
public:
    Complex(int r, int i):m_r(r), m_i(i){}
    void print(void) const {
        cout << m_r << "+" << m_i << endl; 
    }
    Complex& operator +=(const Complex& c) {
        m_r += c.m_r; 
        m_i += c.m_i; 
        return *this; 
    }
    friend Complex& operator -=(Complex& l, 
const Complex& r) {
        l.m_r -= r.m_r; 
        l.m_i -= r.m_i; 
        return l; 
    } 
    int m_r; 
    int m_i; 
}; 

int main() {
    Complex c1(1, 2); 
    Complex c2(2, 3); 
    
    c1 += c2; 
    c1.print(); 

    c1 -= c2; 
    c1.print(); 

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM