#include <iostream> #include <string> #include <vector> // 运算符重载输入类的三种形式。内部成员函数,非成员函数,友元函数。 using namespace std; class Fruit { friend Fruit& operator+=(Fruit&,const Fruit&); //友元 public: Fruit(int a=0, string b="Apple"):sum(a),name(b){} Fruit operator+(const Fruit&); //声明做类成员,+左操作数是类对象 void getf(){cout << sum << "/t" << name << endl;} private: int sum; string name; }; Fruit operator+(const Fruit& f1,const Fruit& f2) //非成员函数,形参数量比类成员函数多一个,但是没有创建临时变量 { Fruit tf1(f1); tf1 += f2; return tf1; } Fruit Fruit::operator +(const Fruit& f1) //友元函数定义 { sum +=f1.sum; name+=f1.name; return *this; } Fruit& operator+=(Fruit& f1, const Fruit& f2) //内部成员函数定义 { f1=f1+f2; //有创建一次临时对象。 return f1; } void main() { Fruit f1(6); Fruit f2(9,"Apple1"); (f1+f2).getf(); //调用类成员函数sum(9+6)和名字(Apple+new)一起合并组成一个新的对象。 Fruit f3(5); //调用非类成员函数 Fruit f4(4,"Apple2"); f3+=f4; f3.getf(); Fruit f5(5,"Apple5"); Fruit f6(7); (f5+f6).getf(); }