0

たとえば、次のクラスを 2 つに分割する必要があります。

class Range {
 public:
  Range(int end);

  Range begin();
  Range end();

  // Second class would contain these methods.
  bool operator!=(const Range& range);
  int operator*();
  void operator++();
};

// Print 012
// Almost as pretty as Python :D
for (int i : Range(3)) {
  std::cout << i;
}

?

PS: 標準ライブラリにこのようなクラスはありますか?

アップデート:

代替設計は次のようになります。

class Range;

class RangeIterator {
 public:
  bool operator!=(const RangeIterator& range_iterator);
  int operator*();
  void operator++();

 private:
  RangeIterator(const Range& range);
};

class Range {
 public:
  Range(int end);

  RangeIterator begin();
  RangeIterator end();

  friend class RangeIterator;
};
4

3 に答える 3

0

2 つのクラスに分割する必要があるかどうかは、ソフトウェアが使用されるコンテキストに大きく依存します。

たとえば、ソフトウェアの残りの部分がこの種のコードとは何の関係もない場合、物事をまとめておくことは理にかなっており、複雑さを軽減します。一方、ある種の一般的なユーティリティを使用しようとしている場合は、保守性 (または単純化のために) を分割する方がよいかもしれません。

このようなコードのスニペットに厳しいルールを設けるのではなく、保守性と可読性の観点から考えるべきだと思います。あなたのデザインの選択は、長期的に物事を維持しやすくしますか? プロジェクトの複雑さを軽減しますか?

これは、ソフトウェアの設計に関する素晴らしい点の 1 つです。

于 2013-02-04T07:38:59.857 に答える