C的定义中运算符的操作对象仅限于基本的内置数据类型,没有办法操作用户自定义的类型(类)。但是大多数时候,我们需要对我们定义的类型执行类似的操作。这时候我们就需要重新定义这个运算符,赋予它新的功能来满足自己的需求。
目录
一、待解决的问题二。操作员过载III。摘要
一、需要解决的问题
下面的复数解法可行吗?
我们来看看复数的加法:
#包含stdio.h
阶级情结
{
int a;
int b;
公共:
复数(int a=0,int b=0)
{
this-a=a;
this-b=b;
}
int getA()
{
返回a;
}
int getB()
{
返回b;
}
友复数Add(常数复数p1,常数复数p2);
};
复杂加法(常量复杂p1,常量复杂p2)
{
复杂ret
ret . a=P1 . a p2 . a;
ret . b=P1 . b p2 . b;
返回ret
}
int main()
{
复合物c1(1,2);
复杂c2(3,4);
复数c3=Add(c1,C2);//c1 c2
printf('c3.a=%d,c3.b=%d\n ',c3.getA(),C3 . getb());
返回0;
}
输出结果如下:
想
Add函数可以解决复杂对象相加的问题,但复数是真实世界中确实存在的复数,复数在数学中的地位和普通实数是一样的。
为什么+运算符不能同时支持复数加法?这涉及到重载操作符。
二、操作符重载
C中的重载可以扩展运算符的功能。
运算符以函数方式重载。
自然
用特殊形式的函数扩展运算符的功能。
可以通过operator关键字定义一个特殊的函数。operator的本质是通过函数重载运算符。
语法
让我们来探索运算符重载:
#包含stdio.h
阶级情结
{
int a;
int b;
公共:
复数(int a=0,int b=0)
{
this-a=a;
this-b=b;
}
int getA()
{
返回a;
}
int getB()
{
返回b;
}
友复算子(常数复p1,常数复p2);
};
复数运算符(常数复数p1,常数复数p2)
{
复杂ret
ret . a=P1 . a p2 . a;
ret . b=P1 . b p2 . b;
返回ret
}
int main()
{
复合物c1(1,2);
复杂c2(3,4);
复数c3=c1 c2//运算符(c1,c2)
printf('c3.a=%d,c3.b=%d\n ',c3.getA(),C3 . getb());
返回0;
}
输出结果如下:
运算符重载函数可以定义为类的成员函数。
比全局运算符重载函数少了—个参数(左操作数),运算符重载可以不依赖友元完成。编译器优先在成员函数中查找运算符重载函数。
下面是如何在成员函数中重载运算符:
#包含stdio.h
阶级情结
{
int a;
int b;
公共:
复数(int a=0,int b=0)
{
this-a=a;
this-b=b;
}
int getA()
{
返回a;
}
int getB()
{
返回b;
}
复数运算符(常数复数p)
{
复杂ret
printf('复数运算符(const复数p)\ n ');
ret . a=this-a p . a;
ret . b=this-b p . b;
返回ret
}
友复算子(常数复p1,常数复p2);
};
复数运算符(常数复数p1,常数复数p2)
{
复杂ret
printf('复数运算符(常数复数p1,常数复数p2)\ n ');
ret . a=P1 . a p2 . a;
ret . b=P1 . b p2 . b;
返回ret
}
int main()
{
复合物c1(1,2);
复杂c2(3,4);
复数c3=c1 c2//c1 .运算符(c2)
printf('c3.a=%d,c3.b=%d\n ',c3.getA(),C3 . getb());
返回0;
}
输出结果如下:
这说明编译器优先考虑在成员函数中查找运算符重载的函数。
因此,上面的代码可以直接写成:
#包含stdio.h
阶级情结
{
int a;
int b;
公共:
复数(int a=0,int b=0)
{
this-a=a;
this-b=b;
}
int getA()
{
返回a;
}
int getB()
{
返回b;
}
复数运算符(常数复数p)
{
复杂ret
ret . a=this-a p . a;
ret . b=this-b p . b;
返回ret
}
};
int main()
{
复合物c1(1,2);
复杂c2(3,4);
复数c3=c1 c2//c1 .运算符(c2)
printf('c3.a=%d,c3.b=%d\n ',c3.getA(),C3 . getb());
返回0;
}
三、小结
运算符重载是c的强大特性之一,运算符重载的本质是通过函数来扩展运算符的功能。运算符关键字是实现运算符重载的关键。运算符重载可以通过遵循相同函数重载规则的全局函数和成员函数来实现。
关于C-operator重载的这篇文章到此为止。有关C-运算符重载的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。