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;
}