C++ operator(重载操作符)

  • 类型转换:operator <类型>()
  • 运算符重载:<类型> operator <运算符>(<参数表>)

1、operator类的转换函数  ---类型转换:operator <类型>()

转换函数必须是类方法

转换函数不能指定返回类型

转换函数不能有参数

类型转换函数的作用是将一个类的对象转换成另一类型的数据

从函数形式可以看到,它与运算符重载函数相似,都是用关键字operator开头,只是被重载的是类型名。double类型经过重载后,除了原有的含义外,还获得新的含义(将一个Complex类对象转换为double类型数据,并指定了转换方法)。这样,编译系统不仅能识别原有的double型数据,而且还会把Complex类对象作为double型数据处理。

那么程序中的Complex类对具有双重身份,既是Complex类对象,又可作为double类型数据。Complex类对象只有在需要时才进行转换,要根据表达式的上下文来决定。转换构造函数和类型转换运算符有一个共同的功能:当需要的时候,编译系统会自动调用这些函数,建立一个无名的临时对象(或临时变量)。
 

2、operator重载运算符------运算符重载:<类型> operator <运算符>(<参数表>)

operator <运算符>可以看成一个函数名

#include <iostream>

using namespace std;

class MyClass
{
public:
    MyClass() {}
    MyClass(int a, double b):a_(a),b_(b){}
    ~MyClass(){}

    int get_a() { return a_; }
    double get_b() { return b_; }

    MyClass operator+(const MyClass &adder) const//以成员函数方式重载+
    {
        MyClass sum;
        sum.a_ = a_ + adder.a_;
        sum.b_ = b_ + adder.b_;
        return sum;
    }

    friend MyClass operator-(const MyClass &A,const MyClass &B)//以友元方式重载-
    {
        MyClass diff;
        diff.a_ = A.a_ - B.a_;
        diff.b_ = A.b_ - B.b_;
        return diff;
    }

private:
    int a_;
    double b_;
};


int main()
{
    MyClass A(1, 1.1);
    MyClass B(2, 2.2);
    MyClass sum = A + B;
    MyClass diff = A - B;
    cout << sum.get_a() << "\t" << sum.get_b() << endl;
    cout << diff.get_a() << "\t" << diff.get_b() << endl;

    return 0;
}

发布了165 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42269817/article/details/102943036