c++d的运算符重载
2021-05-29 01:02
标签:运算符重载 class 没有 运算 数据 类型 利用 括号 ima a.运算符重载必须符合语言语法 例如:不能在c++中写 float f; 3.14=f; 所以重载运算符”=”也不能用来下面的操作: Complex c; 3.14+6i=c; b.不能重载对内部c++数据类型进行操作的运算符. 例如,不能重载二元浮点减法运算符. c.不能创建新的运算符,所有重载运算符必须是c++中原来就有的 d.不能重载以下运算符:类成员选择运算符,成员指针运算符,作用域运算符. 2.运算符重载的形式 运算符重载的原型为: operator () 例如: 定义一个complex类 class complex { private: double imag,real; public: complex(double a=0,double b=0){real=a;imag=b;}//当无参传入时两者都为0. complex operator +(complex c);//成员函数重载传入的参数个数都比操作的个数少一个,因为它为复数类,所以返回值也为complex. }; complex complex::operator +(complex c) { complex temp;//定义一个复数类用来保存最后的结果 temp.real=real+c.real;//real默认为当前对象的real,我们也可以用this指针来写. temp.imag=imag+c.imag; return temp; } 在主函数中 c=c1+c2;//在计算机看来,会把它当做c1.operator + (c2); 如果我们需要二元的运算符,这时我们就要将运算符重载定义为友元函数重载运算符. 函数原型为: friend operator (). 与成员函数不同,友元函数重载运算符需要的参数个数和操作个数一样多.例: friend complex operator +(complex c1,complex c2) { complex temp; temp.real=c1.real+c2.real;//因为友元函数没有this指针所以这里也不可以用到this指针 temp.imag=c1.imag+c2.imag; return temp; } 在主函数中c1+c2计算机会把它看做为operator + (c1,c2). Ps: 两种运算符在功能上没有太大的区别,但是友元函数重载运算符更为灵活. 例: C=3.14+c1; 如果将+用成员函数重载,那么计算就会将它看做为3.14.operator + (c1),那么程序就会报错,如果利用友元函数进行重载,就可以解决这个问题. 单目运算符的重载: 例如: class Counter { private: Counter(int i=0){value=i;} Counter operator ++();//这是前缀的++运算符 Counter operator ++(int);//这是后缀的++运算符. }; 在重载中的写法与成员函数运算符重载和友元函数运算符重载类似,--运算符与++运算符的重载一样,括号里面的int没有实际作用,只是为区别前缀和后缀,不需要传入参数. c++d的运算符重载 标签:运算符重载 class 没有 运算 数据 类型 利用 括号 ima 原文地址:https://www.cnblogs.com/zxy20020103/p/14773417.html