归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
身先才能率人,律己才能服人!
一起加油!
目录
????????运算符重载规则说明如下。
????????实现运算符重载是通过 operator 关键字实现的,运算符重载一般可以通过类的成员函数和类的友元函数来实现。
????????运算符重载为类的成员函数后,作为类的成员函数它可以任意访间类中的私有成员。在实际使用时,类中的成员函数总是通过该类的对象来访问的,如果是双目运算符,左操作数一定是访问成员函数的对象本身,另一个操作数通过运算符重载函数的参数表来传递;如果是单目运算符,操作数就是访问成员函数的对象本身,不需要再传递任何参数。
#include<iostream>
using namespace std;
class complex{
private://私有接口
double real,image;
public://公有接口
complex(double r=0.0,double i=0.0):real(r),image(i){ }
~complex(){ }
complex operator*(const complex& c)const;//定义两个复数乘法运算
complex operator*(const double& c)const;//定义复数与实数的乘法运算
void print()const;
};
void complex::print()const
{
cout<<"("<<real<<","<<image<<")"<<endl;
}
complex complex::operator*(const complex& c)const
{
return complex(real*c.real-image*c.image,real*c.image+image*c.real);
}
complex complex::operator*(const double& c)const
{
return complex(real*c,image*c);
}
int main()
{
complex c1(3,4),c2(7,8),c3;
c3=c2*c1;
cout<<"c2:";
c2.print();
cout<<"c1";
c1.print();
cout<<"c2*c1";
c3.print();
c3=c2*5.0;
cout<<"c2*5.0";
c3.print();
return 0;
}
????????在本例中将复数的乘法重载为复数类的成员函数,由于复数可以与另一个复数进行乘法运算,也可以和另一个实数进行乘法运算,因此这里重载了两种形式。运算符重载为成员函数,除函数名称必须使用 operator<运算符>之外,其他与普通成员函数没有什么区别。在使用时可以采用成员函数调用的方式,也可以采用直接通过运算符对复杂操作数操作的方式。重载后的运算符原有的功能不受影响。因此,相同的运算符作用于不同的对象,就会导致不同的操作行为,从而体现了C++的多态性。?
????????友元函数是类的“朋友”,它可以自由地访问类的所有成员。与重载为类的成员函数不同当运算符重载为类的友元函数时,由于友元是外部函数,不存在对象调用它,因此运算符所需要的操作数都需要通过函数的形参来传递,形参参数表中参数从左至右的顺序就是运算符操作数的顺序。
#include<iostream>
using namespace std;
class complex{
private:
double real,image;
public:
complex(double r=0.0,double i=0.0):real(r),image(i){ }
~complex(){ };
friend complex operator+ (double c1, const complex & c2);
friend complex operator-(double c1,const complex & c2);
void print()const;
};
void complex::print()const
{
cout<<"("<<real<<","<<image<<")"<<endl;
}
complex operator+ (double c1,const complex & c2)
{
return complex(c1+c2.real, c2.image);
}
complex operator- (double cl,const complex & c2)
{
return complex(cl-c2.real,-c2.image);
}
int main()
{
complex c1(3,4),c2;
c2=4+c1;
cout<<"4+";
c1.print();
cout<<"结果为:";
c2.print();
c2=4-c1;
cout<<"4-";
c1.print();
cout<<"结果为:";
c2.print();
return 0;
}
????????运算符重载的一般规律有如下几点。
????????以上就是我对C++多态性——(5)运算符重载(第二节)的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++多态性的理解,请持续关注我哦!!!?