运算符重载,所有运算符 definition/header

Operator overloading, definition/header for all operators

如何最好地将以下迭代器代码拆分为 header 和定义。

// std::iterator example
#include <iostream>     // std::cout
#include <iterator>     // std::iterator, std::input_iterator_tag

class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
  int* p;
public:
  MyIterator(int* x) :p(x) {}
  MyIterator(const MyIterator& mit) : p(mit.p) {}
  MyIterator& operator++() {++p;return *this;}
  MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
  bool operator==(const MyIterator& rhs) const {return p==rhs.p;}
  bool operator!=(const MyIterator& rhs) const {return p!=rhs.p;}
  int& operator*() {return *p;}
};

int main () {
  int numbers[]={10,20,30,40,50};
  MyIterator from(numbers);
  MyIterator until(numbers+5);
  for (MyIterator it=from; it!=until; it++)
    std::cout << *it << ' ';
  std::cout << '\n';

  return 0;
}

来自:http://www.cplusplus.com/reference/iterator/iterator/

在这种情况下,您将如何实施其他运算符?

此示例还显示您将一个数组传递给迭代器,但如果您希望能够遍历某些 属性(s) 或您的 class实例有?

你会创建一个单独的迭代器来与你的 class 一起工作,还是在 class 本身内部实现运算符方法?

关于拆分成实现和定义我会这样做

MyIterator.h 文件:

#IFNDEF MYITERATOR_H
#DEFINE MYITERATOR_H
#include <iterator>
class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
 private:
   int* p;
 public:
    MyIterator(int *);
    MyIterator(const MyIterator&);
    MyIterator& operator++();
    MyIterator operator++(int);
    bool operator==(const MyIterator&);
    bool operator!=(const MyIterator&);
    int& operator*();
};

#ENDIF 

MyIterator.cpp 文件:

#include "MyIterator.h"

MyIterator::MyIterator(int * x){
    p = x;
}
MyIterator::MyIterator(const MyIterator& mit){
    p = mit.p;
}
MyIterator& MyIterator::operator++(){
    ++p;
    return *this;
}
MyIterator MyIterator::operator++(int x){
    MyIterator temp(*this);
    ++p;
    return temp;
}
bool MyIterator::operator==(const MyIterator& rhs){
    return p == rhs.p;
}
bool MyIterator::operator!=(const MyIterator& rhs){
    return p != rhs.p;
}
int& operator*(){
    return *p;
}

你只需要将#include "MyIterator.h"添加到你的主程序中就可以使用它