我最近去在操作符重载的文章,其中提到它非成员运算符重载意思。如果有人能够用一个例子解释非成员操作符重载意味着什么,我将不胜感激。我知道成员运算符重载是什么(在重载(binary..etc)我看过这个post来到SO操作型这让我相信,非成员运算符重载的目的是处理操作符重载类的方法其中,第一个参数是不是一个类,简直就是一个天然的类型解释非成员运算符重载是肯定会理解的任何链接或例子什么是由非成员运算符重载
2
A
回答
4
这意味着你可以重载外的类。:
struct X { int data; };
bool operator<(X const& a, X const& b)
{
return a.data < b.data;
}
这是不对称的重载,其中左边的操作并不需要将自己的类型有用:
bool operator<(int a, X const& b)
{
return a < b.data;
}
这里的一个常见的成语是将其与一流定义和朋友联合声明:
struct X
{
int data;
friend bool operator<(X const& a, X const& b) { return a.data<b.data; }
friend bool operator<(int a, X const& b) { return a<b.data; }
};
这里,operator<
仍然是技术上非 -member。
这样做的另一个有用的副作用,如下面DrewDormann指出,就是(X const&, X const&)
将适用于那些隐式转换为X const&
,而不仅仅是确切类型的表达式任何操作数。
+0
它对于* symetrical *类型转换也很有用,允许所有相关操作数的隐式类型转换。 – 2013-03-17 21:59:54
+0
@DrewDormann好点。添加 – sehe 2013-03-17 22:05:56
0
最常见的方式是重载操作< <将在std::cout
被称为:
namespace X {
class MyClass {
...
};
}
std::ostream& operator<< (std::ostream&, const X::MyClass&);
这就是所谓的std :: ostream的部件上,这样你就不是你的类中定义它。然而有时候这个功能不能通过公共接口来实现(因为你的操作员需要访问数据表示)。
相关问题
- 1. 什么时候应该使用非成员运算符重载?
- 2. 运算符重载:成员函数与非成员函数?
- 3. 成员与非成员运算符重载
- 4. 成员二元运算符和运算符重载中的非成员二元运算符
- 5. C++成员vs非成员运算符+
- 6. 运算符+ =重载,为什么是const?
- 7. 将运算符重载为类成员
- 8. 运算符使用非成员函数重载?
- 9. 非成员运算符重载应该放在哪里?
- 10. 不允许使用非成员函数重载C++转换运算符的原因是什么
- 11. 为什么重载运算符&&错误?
- 12. 为什么运算符重载失败?
- 13. 什么是指针 - 成员 - > *和。*运算符在C++中?
- 14. 在Groovy中,成员运算符(“in”)的优先级是什么
- 15. 过载成员选择运算符
- 16. 什么是重写的C运算符++
- 17. 为什么我不能在类之外重载C++转换运算符,作为非成员函数?
- 18. 将加法运算符重载为非成员函数会更好吗?
- 19. 重载运算符[]为非类类型
- 20. 运算符重载 - 重载*
- 21. 运算符在这里重载是什么:String8 :: operator const char *()const
- 22. 我的模板重载<<运算符是什么错?
- 23. 什么是C++中的重载运算符?
- 24. 为什么C#运算符重载必须是静态的?
- 25. 什么是VB.NET中重载的'And'运算符的例子?
- 26. “&”是什么意思在运算符重载
- 27. 重载一个布尔运算符的成员函数
- 28. 无法访问类的成员,而运算符重载
- 29. 运算符重载(朋友和成员函数)
- 30. 派生成员和重载Ostream运算符
您给出的链接显示非会员操作员重载的示例,如您所说的用于在原语上执行添加操作 – 2013-03-17 21:57:02
[This](http://stackoverflow.com/q/4421706/1410711)可能会有所帮助。 。 – Recker 2013-03-17 21:57:26