建设部网站官网 施工许可,企业qq官网,网站开发需要学数学吗,武夷山景区网站建设优点归纳编程学习的感悟#xff0c; 记录奋斗路上的点滴#xff0c; 希望能帮到一样刻苦的你#xff01; 如有不足欢迎指正#xff01; 共同学习交流#xff01; #x1f30e;欢迎各位→点赞 #x1f44d; 收藏⭐ 留言#x1f4dd; 身先才能率人#xff0c;律己才能服人…
归纳编程学习的感悟 记录奋斗路上的点滴 希望能帮到一样刻苦的你 如有不足欢迎指正 共同学习交流 欢迎各位→点赞 收藏⭐ 留言 身先才能率人律己才能服人
一起加油 目录 一、运算符重载规则
二、运算符重载为成员函数
例复数类乘法运算重载为类的成员函数 。
说明 三、运算符重载为友元函数
例运算符重载为类的友元函数实数与复数的加减运算。 一、运算符重载规则 运算符重载规则说明如下。 (1)运算符重载的实质是函数重载可以对大部分的运算符进行重载这是 C的重要特C编译器根据参数个数和类型来决定调用哪个函数重载同一个运算符可以定义几个运算符重载函数来进行不同的操作。运算符重载返回类型可以是任意的通常与操作数类型相同。 (2)重载后的运算符所做的操作要尽量保持原来的意义否则会降低程序的可读性。 (3)C中用户不能定义新的运算符只能对已有的运算符进行重载。有六个运算符不能重载:成员访问运算符“.”成员指针运算符“-”和“*”作用域运算符“::”sizeof运算符和三目运算符“?:” (4)重载运算符与预定义运算符的使用方法完全相同它不能改变原来运算符的参数个数也不能改变其优先级。 实现运算符重载是通过 operator 关键字实现的运算符重载一般可以通过类的成员函数和类的友元函数来实现。
二、运算符重载为成员函数 运算符重载为类的成员函数后作为类的成员函数它可以任意访间类中的私有成员。在实际使用时类中的成员函数总是通过该类的对象来访问的如果是双目运算符左操作数一定是访问成员函数的对象本身另一个操作数通过运算符重载函数的参数表来传递;如果是单目运算符操作数就是访问成员函数的对象本身不需要再传递任何参数。
例复数类乘法运算重载为类的成员函数 。
#includeiostream
using namespace std;
class complex{private://私有接口 double real,image;public://公有接口 complex(double r0.0,double i0.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.imageimage*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;c3c2*c1;coutc2:;c2.print();coutc1;c1.print();coutc2*c1;c3.print();c3c2*5.0;coutc2*5.0;c3.print();return 0;
} 说明 在本例中将复数的乘法重载为复数类的成员函数由于复数可以与另一个复数进行乘法运算也可以和另一个实数进行乘法运算因此这里重载了两种形式。运算符重载为成员函数除函数名称必须使用 operator运算符之外其他与普通成员函数没有什么区别。在使用时可以采用成员函数调用的方式也可以采用直接通过运算符对复杂操作数操作的方式。重载后的运算符原有的功能不受影响。因此相同的运算符作用于不同的对象就会导致不同的操作行为从而体现了C的多态性。 三、运算符重载为友元函数 友元函数是类的“朋友”它可以自由地访问类的所有成员。与重载为类的成员函数不同当运算符重载为类的友元函数时由于友元是外部函数不存在对象调用它因此运算符所需要的操作数都需要通过函数的形参来传递形参参数表中参数从左至右的顺序就是运算符操作数的顺序。
例运算符重载为类的友元函数实数与复数的加减运算。
#includeiostream
using namespace std;
class complex{
private:double real,image;
public:complex(double r0.0,double i0.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(c1c2.real, c2.image);
}complex operator- (double cl,const complex c2)
{return complex(cl-c2.real,-c2.image);
}
int main()
{complex c1(3,4),c2;c24c1;cout4;c1.print();cout结果为:; c2.print();c24-c1;cout4-;c1.print();cout结果为:;c2.print();return 0;
} 运算符重载的一般规律有如下几点。 (1)运算符既可以重载为类的成员函数也可以重载为类的友元函数。 (2)对于双目运算符重载为类的成员运算符函数有一个参数重载为类的友元运算符函数带有两个参数;对于单目运算符重载为成员运算符函数不带参数重载为类的友元运算符数带有一个参数。 (3)目运算符一般可以被重载为友元运算符函数或成员运算符函数如果第一个操作数是基本数据类型则必须使用友元:、( )、[ ]只能重载为类的成员函数;、-、/、!、~、%、、 建议重载为成员函数;其他双目运算符建议重载为友元函数。 以上就是我对C多态性——(5)运算符重载第二节的理解希望本篇文章对你有所帮助也希望可以支持支持博主后续博主也会定期更新学习记录记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴请在评论区说出来哦同时我还会继续更新对C多态性的理解请持续关注我哦