C++运算符重载(Operator overloading)

运算符重载(Operator overloading)

目的:重载加号运算符能让对象之间进行运算

定义重载运算符相当于定义一个函数,要用 operator 关键字开始

 

SYNTAX

返回类型 operator 运算符(参数列表)

  

注:重载后不改变运算顺序

重载后没有修改运算符优先级

不改变运算变量的个数

 

例:重载加号“+”运算符(作为成员函数)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Integer
 5 {
 6     public:
 7         void setvalue(int val)
 8         {
 9             value = val;
10         }
11         int getvalue(void)
12         {
13             return value;
14         }
15         Integer operator+(const Integer&in)
16         {
17             Integer integer;
18             integer.value = this->value + in.value;
19             return integer;
20         }
21     private:
22         int value;
23 
24 };
25 int main()
26 {
27     Integer int1,int2,int3;
28     int val;
29     int1.setvalue(3);
30     val = int1.getvalue();
31     cout << val << endl;
32 
33     int2.setvalue(5);
34     val = int2.getvalue();
35     cout << val << endl;
36 
37     int3 = int1 + int2;
38     val = int3.getvalue();
39     cout << val << endl;
40     return 0;
41 }

 

 例:作为友元函数重载“+”运算符

#include<iostream>
using namespace std;

class Integer
{
    public:
        void setvalue(int val)
        {
            value = val;
        }
        int getvalue(void)
        {
            return value;
        }
        friend Integer operator+(const Integer&a,const Integer&b);//友元函数
    private:
        int value;
};
Integer operator+(const Integer&a,const Integer&b)
{
            Integer integer;
            integer.value = a.value + b.value;
            return integer;
}
int main()
{
    Integer int1,int2,int3;
    int value;
    int1.setvalue(3);
    value = int1.getvalue();
    cout << value << endl;

    int2.setvalue(5);
    value = int2.getvalue();
    cout << value << endl;

    int3 = int2 + int1;
    value = int3.getvalue();
    cout<<value<<endl;
    return 0;
}

 

 

例:重载“=”运算符

#include<iostream>
using namespace std;

class Integer
{
    public:
        void setvalue(int val)
        {
            value = val;
        }
        int getvalue(void)
        {
            return value;
        }
        Integer operator=(const Integer&in)
        {
            value = in.value;
        }
    private:
        int value;
};

int main()
{
    Integer int1,int2;
    int value;
    int1.setvalue(4);
    value = int1.getvalue();
    cout << value << endl;

    int2 = int1;
    value = int2.getvalue();
    cout << value << endl;
    return 0;
}

 

例:重载输入“>>”、输出“<<” 运算符

#include<iostream>
using namespace std;

class Time
{
    private:
        int hour;
        int minute;
    public:
        Time()
        {
            hour = 0;
            minute = 0;
        }
        Time(int h,int m)
        {
            hour = h;
            minute = m;
        }
        friend ostream &operator<<(ostream &output, const Time &T)
        //ostream是一个类,在重载运算符的时候作为某个类的友元函数
        //cout是ostream的一个实例
        {
            output << "hour: " << T.hour << "  minute: " << T.minute ;
            return output;
        }
        friend istream &operator>>(istream &input, Time &T) //不能加const
        {
            input >> T.hour >> T.minute ;
            return input;
        }
};
int main()
{
    Time T1(10,20),T2(18,25),T3;
    cout << T1 << endl;
    cout << T2 << endl;
    cin >> T3;
    cout << T3 << endl;
    return 0;
}

 

 

不能重载的运算符

.            (点运算符)

->  (成员指针访问运算符)

::   (域运算符)

sizeof (长度运算符)

? :       (三元运算符)

 

只能通过成员函数重载的运算符

=:赋值运算符

():函数调用运算符

[ ]: 下标运算符

-> : 通过指针访问类成员的运算符

上一篇:Integer 类型的 == 和 equals 的陷阱


下一篇:P1020 导弹拦截