C++语言程序设计 运靠符函数 运 ● 声明形式 算 返回类型 operator运算符(形参表) 符 { 重 载 7 。重载为类成员函数时 参数个数=原操作数个数-1(后置++、一除外) 重载为非成员函数时参数个数=原操作数个数, 且至少应该有一个自定义类型的形参
C++语言程序设计 11 运算符函数 声明形式 返回类型 operator 运算符(形参表) { ...... } 重载为类成员函数时 参数个数=原操作数个数-1(后置++、--除外) 重载为非成员函数时 参数个数=原操作数个数, 且至少应该有一个自定义类型的形参。 运算符重载
C++语言程序设计 运算符诚员函数的设计 远 算 ·双目运算符B 符 -如果要重载B为类成员函数,使之能够实 重 现表达式oprd1 B oprd2,其中oprd1为A 载 类对象,则B应被重载为A类的成员函数, 形参类型应该是oprd2所属的类型。 -经重载后,表达式oprd1 B oprd,2相当于 oprd1.operator B (oprd2) 米 12
C++语言程序设计 12 运算符成员函数的设计 双目运算符 B – 如果要重载 B 为类成员函数,使之能够实 现表达式 oprd1 B oprd2,其中 oprd1 为A 类对象,则 B 应被重载为 A 类的成员函数, 形参类型应该是 oprd2 所属的类型。 – 经重载后,表达式 oprd1 B oprd2 相当于 oprd1.operator B (oprd2) 运算符重载
C++语言程序设计 例8-1 远 算 将“+”、“-”运算重载为复数类 符 的成员函数。 重 载 规则: 一实部和虚部分别相加减。 操作数: 两个操作数都是复数类的对象
C++语言程序设计 13 运算符重载 例 8-1 将“+”、“-”运算重载为复数类 的成员函数。 规则: – 实部和虚部分别相加减。 操作数: – 两个操作数都是复数类的对象
//8_1.cpp #include <iostream> using namespace std; class Complex{/复数类定义 public: /外部接口 Complex(double r 0.0,double i=0.0): real(r),imag(i){} //构造函数 Complex operator (const Complex &c2) const; /运算符+重载成员函数 Complex operator (const Complex &c2)const; //运算符-重载成员函数 void display()const; //输出复数 private:/私有数据成员 double real; /复数实部 double imag; //复数虚部
//8_1.cpp #include <iostream> using namespace std; class Complex { //复数类定义 public: //外部接口 Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) { } //构造函数 Complex operator + (const Complex &c2) const; //运算符+重载成员函数 Complex operator - (const Complex &c2) const; //运算符-重载成员函数 void display() const; //输出复数 private: //私有数据成员 double real; //复数实部 double imag; //复数虚部 }; 14
ComplexComplex:operator (const Complex &c2)const{/重载运算符函数实现 return Complex(real c2.real,imag c2.imag);/创建一个临时无名对象作为返回值 Complex Complex:operator (const Complex &c2)const{/重载运算符函数实现 return Complex (real -c2.real,imag c2.imag);/创建一个临时无名对象作为返回值
Complex Complex::operator + (const Complex &c2) const { //重载运算符函数实现 return Complex(real + c2.real, imag + c2.imag); //创建一个临时无名对象作为返回值 } Complex Complex::operator - (const Complex &c2) const { //重载运算符函数实现 return Complex(real - c2.real, imag - c2.imag); //创建一个临时无名对象作为返回值 } 15