在C ++中,我们可以使运算符为用户定义的类工作。这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载。
在C ++中,我们可以使运算符为用户定义的类工作。这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载。
例如,我们可以在String之类的类中重载运算符'+',以便仅使用+就可以连接两个字符串。 算术运算符可能会重载的其他示例类是复数,小数,大整数等。
一个简单而完整的例子
- #include<iostream>
- usingnamespacestd;
- classComplex{
- private:
- intreal,imag;
- public:
- Complex(intr=0,inti=0){real=r;imag=i;}
- Complexoperator+(Complexconst&obj){
- Complexres;
- res.real=real+obj.real;
- res.imag=imag+obj.imag;
- returnres;
- }
- voidprint(){cout<<real<<"+i"<<imag<<endl;}
- };
- intmain()
- {
- Complexc1(10,5),c2(2,4);
- Complexc3=c1+c2;
- c3.print();
- }
操作员功能和普通功能有什么区别?
操作员功能与普通功能相同。唯一的区别是,运算符的名称始终是运算符关键字,后跟运算符的符号,并且在使用相应的运算符时会调用运算符功能。
以下是全局运算符功能的示例。
- #include<iostream>
- usingnamespacestd;
- classComplex{
- private:
- intreal,imag;
- public:
- Complex(intr=0,inti=0){real=r;imag=i;}
- voidprint(){cout<<real<<"+i"<<imag<<endl;}
- friendComplexoperator+(Complexconst&,Complexconst&);
- };
- Complexoperator+(Complexconst&c1,Complexconst&c2)
- {
- returnComplex(c1.real+c2.real,c1.imag+c2.imag);
- }
- intmain()
- {
- Complexc1(10,5),c2(2,4);
- Complexc3=c1+c2;
- c3.print();
- return0;
- }
我们可以让所有运算符超负荷吗?
除了少数操作员之外,几乎所有操作员都可以重载。以下是不能重载的运算符的列表。
为什么不能。(点),::,?:和sizeof是否过载?
请参阅此以获取Stroustrup自己的答案。
关于运算符重载的要点
1)为了使运算符重载起作用,至少一个操作数必须是用户定义的类对象。
2) 赋值运算符:编译器会自动为每个类创建一个默认的赋值运算符。默认赋值运算符确实将右侧的所有成员分配到左侧,并且在大多数情况下都可以正常工作(此行为与复制构造函数相同)。请参阅此了解更多详情。
3) 转换运算符:我们还可以编写可用于将一种类型转换为另一种类型的转换运算符。
- #include<iostream>
- usingnamespacestd;
- classFraction
- {
- intnum,den;
- public:
- Fraction(intn,intd){num=n;den=d;}
- operatorfloat()const{
- returnfloat(num)/float(den);
- }
- };
- intmain(){
- Fractionf(2,5);
- floatval=f;
- cout<<val;
- return0;
- }
重载的转换运算符必须是成员方法。其他运算符可以是成员方法或全局方法。
4)任何可以用单个参数调用的构造函数都可以用作转换构造函数,这意味着它也可以用于隐式转换为正在构造的类。
- #include<iostream>
- usingnamespacestd;
- classPoint
- {
- private:
- intx,y;
- public:
- Point(inti=0,intj=0){
- x=i;y=j;
- }
- voidprint(){
- cout<<endl<<"x="<<x<<",y="<<y;
- }
- };
- intmain(){
- Pointt(20,20);
- t.print();
- t=30;
- t.print();
- return0;
- }
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经