在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
5.2.3 成员运算符重载函数 注意:在成员运算符重载函数的形参表中,若运算符是单目的,则参数表为空;若运算符是双目的,则参数表中有一个操作数。 2. 双目运算符重载 calss X{ 例5.5 用成员运算符重载函数进行复数的运算。 #include<iostream> using namespace std; class Complex{ public: Complex(){}; Complex(double r,double i) { real = r; imag = i; } void print(); Complex operator+(Complex co); //声明运算符+的重载函数 Complex operator-(Complex co); //声明运算符-的重载函数 Complex operator*(Complex co); //声明运算符*的重载函数 Complex operator/(Complex co); //声明运算符/的重载函数 private: double real;//复数的实部 double imag;//复数的虚部 }; Complex Complex::operator+(Complex co) //定义运算符+的重载函数 { Complex temp; temp.real = real+co.real; temp.imag = imag+co.imag; return temp; } Complex Complex::operator-(Complex co) //定义运算符-的重载函数 { Complex temp; temp.real = real-co.real; temp.imag = imag-co.imag; return temp; } Complex Complex::operator*(Complex co) //定义运算符*的重载函数 { Complex temp; temp.real = real*co.real-imag*co.imag; temp.imag = real*co.imag+imag*co.real; return temp; } Complex Complex::operator/(Complex co) //定义运算符/的重载函数 { Complex temp; double t; t = 1/(co.real*co.real+co.imag*co.imag); temp.real = (real*co.real+imag*co.imag)*t; temp.imag = (co.real*imag-real*co.imag)*t; return temp; } void Complex::print() { cout<<real; cout<<"+"<<imag<<'i'<<endl; } int main() { Complex A1(2.3,4.6),A2(3.6,2.8),A3,A4,A5,A6; A3 = A1+A2; //A3 = A1.operaotr+(A2) A4 = A1-A2; //A3 = A1.operaotr-(A2) A5 = A1*A2; //A3 = A1.operaotr*(A2) A6 = A1/A2; //A3 = A1.operaotr/(A2) A1.print(); A2.print(); A3.print(); A4.print(); A5.print(); A6.print(); return 0; } /* 一般而言,如果在类X中采用成员函数重载双目运算符@,成员运算符函数operator@所需要的 一个操作数由对象aa通过this指针隐含地传递,它的另一个操作数bb在参数表中显示,则以下 两种函数调用方法是等价的。 aa@bb; //隐式调用 aa.operator@(bb); //显示调用 */ 3. (成员运算符重载函数)单目运算符重载 //例5.6 用成员函数重载单目运算符"++" #include<iostream> using namespace std; class Coord{ public: Coord(int i=0,int j=0) { x = i; y = j; } Coord operator++(); //声明成员运算符++重载函数 //void operator++(); void print(); private: int x,y; }; Coord Coord::operator++() //定义成员运算符++重载函数 { ++x; ++y; return *this; //返回当前对象的值 } /* void Coord::operator++() { ++x; ++y; } */ void Coord::print() { cout<<"x="<<x<<","<<"y="<<y<<endl; } int main() { Coord c(10,20); c.print(); ++c; //隐式调用 c.print(); c.operator++(); //显示调用 c.print(); return 0; } /* 本例中主函数中调用成员运算符重载函数operator的两种方式是等价的。 即 ++c ========== c.operator++() 其格式为: @aa; //隐式调用 aa.operator(); //显示调用 从本例中还可以看出,当用成员函数重载单目运算时,没有参数被显示地传递给成员运算符 。参数是通过this指针隐含地传递给函数 */
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论