四、C++ 运算符重载

C++ 运算符重载

一、基本概念

C++中预定义的运算符(+、-等)只能作用于基本的数据类型(整型、浮点型等),而不能作用于对象之间。运算符重载能使得基本运算符也能够对抽象数据类型直接使用。运算符重载后,程序会更简洁,代码更容易理解。

例如:
complex_a和complex_b是两个复数对象,求两个复数的和,可以直接写成:

complex_a + complex_b

运算符重载的实质是函数重载,它的格式是:

返回值类型 operator 运算符(形参表)
{
……
}

程序编译时,把含运算符的表达式作为对运算符函数的调用;把运算符的操作数作为运算符函数的参数;运算符被多次重载时, 根据实参的类型决定调用哪个运算符函数。运算符可以被重载成普通函数,也可以被重载成类的成员函数。

二、运算符重载为普通函数

class Complex {
    public:
        Complex( double r = 0.0, double i= 0.0 ){
            real = r;
            imaginary = i;
        }
        double real; 
        double imaginary; 
};

Complex operator+ (const Complex & a, const Complex & b)
{
    return Complex( a.real+b.real, a.imaginary+b.imaginary);
} 


Complex a(1,2), b(2,3), c;
c = a + b;  //c=2+3i

二、运算符重载为成员函数

class Complex {
    public:
        Complex( double r= 0.0, double m = 0.0 ):real(r), imaginary(m) { }
        Complex operator+ ( const Complex & ); 
        Complex operator- ( const Complex & ); 
    private:
        double real; 
        double imaginary; 
};

Complex Complex::operator+(const Complex & operand2) {
    return Complex( real + operand2.real,imaginary + operand2.imaginary );
}

Complex Complex::operator- (const Complex & operand2){
    return Complex( real - operand2.real,imaginary - operand2.imaginary );
}

int main(){
    Complex x, y(4.3, 8.2), z(3.3, 1.1);
    x = y + z; // x=7.6+9.3i
    x = y - z; // x=1+7.1i

    return 0;
}

四、小结

  1. 编写运算符重载函数可以使基本运算符作用于对象之间,运算符重载的实质是函数重载

  2. 编写运算符重载函数的格式是:

    返回值类型 operator 运算符(形参表) { …… }

  3. 运算符重载为普通函数时, 参数个数为运算符目数;运算符重载为成员函数时, 参数个数为运算符目数减一

你可能感兴趣的:(C++,运算符重载)