无模板的运算符重载 作为C++新手,我的超载体验一直局限于复制、移动赋值运算符以及I/O流运算符。

无模板的运算符重载 作为C++新手,我的超载体验一直局限于复制、移动赋值运算符以及I/O流运算符。,c++,c++11,iterator,operator-overloading,C++,C++11,Iterator,Operator Overloading,现在,我必须为解析树节点类创建迭代器,这意味着我必须重载以下内容: == *(解引用运算符) ++ -- >= 我一直在网上搜索一些C++书籍,但到目前为止,我没有什么特别适合我的情况(即不引用模板),但是我已经知道,增量和减量运算符需要为“后缀”和“前缀”的情况“重载”/p>“两次”。 有人能解释一下我们是如何做到这一点的,以及背后的原因吗 谢谢:) 如果这是离题的话,我很抱歉。您可能想看看图书馆的 这将允许您定义成员函数equal(),derefinence(),increment(),de

现在,我必须为解析树节点类创建迭代器,这意味着我必须重载以下内容:

  • ==
  • *(解引用运算符)
  • ++
  • --
  • >=
  • 我一直在网上搜索一些C++书籍,但到目前为止,我没有什么特别适合我的情况(即不引用模板),但是我已经知道,增量和减量运算符需要为“后缀”和“前缀”的情况“重载”/p>“两次”。 有人能解释一下我们是如何做到这一点的,以及背后的原因吗

    谢谢:)


    如果这是离题的话,我很抱歉。

    您可能想看看图书馆的

    这将允许您定义成员函数
    equal()
    derefinence()
    increment()
    decrement()
    advance()
    distance()
    。从这些成员中,库将生成
    ==
    =
    *
    ++
    -
    -=
    []
    以及为您提供的关系运算符
    =

    您也可以手动定义它,但正如您所指出的,有很多代码重复(相等和不相等、增量前后)。此外,为了更好地使用标准库,迭代器还需要访问特定的typedef、仔细定义的返回类型和临时对象的生命周期管理。迭代器将以直接的方式为您处理所有这些细节

    有一个工作过的示例,您可以尝试将其改编为树迭代器


    注意:不必自己定义模板,但迭代器外观本身就是一个模板,您可以使用特定类型的树类实例化它。

    请参阅以获取初学者。@jrok谢谢。我会精力充沛地消耗它看看这里: