首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >操作人员超载的实际应用?

操作人员超载的实际应用?
EN

Stack Overflow用户
提问于 2016-11-28 06:43:24
回答 1查看 1.4K关注 0票数 1

我试图更多地了解操作符重载的实际用途,以便在代码中有效地使用它们。

您能描述一下重载通常有用的一般情况吗?也许可以提供一些简单的例子?

到目前为止,我知道以下几点:

1)使用重载STL算法是一个常见的例子:

代码语言:javascript
运行
复制
class Example
{
 public:
   int operator()(int i)
   {
      return i+10;
   }
};

int main()
{
   std::vector<int> V{1,2,3,4,5};
   std::transform(V.begin(), V.end(), V.begin(), Example());
}

尽管我认为这与lambda特性现在有点多余。

2)操纵对象成员:

代码语言:javascript
运行
复制
class Example
{
 public:
   int some_variable {0};
   Example() {};
   Example(int x) : some_variable{x} {};

   Example operator+(Example &EO)
   {
      Example EO3;
      EO3.some_variable = some_variable + EO.some_variable;
      return EO3;
   }
};

int main()
{
  Example EO1(100);
  Example EO2(200);
  Example EO3 {EO1 + EO2};
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-28 07:23:25

操作符重载只不过是函数重载。它通常在表示对象的类之间使用,为这些类定义某种代数,允许形成表达式或特定于域的子语言。

一个典型的代数对象的例子,如std::complex 见参考资料。数字,因此参与数字表达式。

另一个例子是std::vectorstd::array,它们对基于索引的容器进行了建模,从而重载了[]操作符。

std::valarray向向量中添加了算法,因此它也实现了+-*/以及许多数学函数(如sincostansqrt.)

另一个例子是模拟指针的std::shared_ptr,因此它重载一元*->,或者重载各种类型的迭代器来模拟集合上的指针和迭代,因此重载* -> == != ++ -- += -=

一个特定于域的子语言的例子是用于输入/输出的std::iostream重载<<>>,或者boost::spirit(看见),它使用操作符来形成类似EBNF的表达式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40838489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档