C++のstd::vectorクラスを継承して新しいクラスを作って新しいメソッドを追加する

シェアする

  • このエントリーをはてなブックマークに追加

スポンサードリンク

あるプログラムの仕様

ある数字の集まりが意味を持つとします。更に、この集まりの集まりも意味を持つとします。
例えば

  • 1と2の集まり
  • 11と12と13の集まり
  • 101と102の集まり

これらのすべての集まりの中から1つの数字、例えば11をキーに11がどの集まりに属しているかを探すプログラムを考えてみましょう。

スポンサードリンク

このプログラムのロジックの検討

さきほどの前提をロジックに落とし込むことを考えます。

  • 1と2の集まり・・・std::vectorに入れる
  • 11と12と13の集まり・・・std::vectorに入れる
  • 101と102の集まり・・・std::vectorに入れる
    更に上記で作成された全てのstd::vectorを上位のstd::vectorに入れる

ここまでのロジックは容易に思いつくと思います。
このあと、例えば、11をキーにどのようにして11,12,13の集まりであるvectorを取得するかを考えないといけません。
vectorから値を取得するには、findを使えばよいのですが、単純に上位のstd::vectorからはfindでは検索できません。
このような場合に、クラスの継承を使って新しいメソッドを作成すれば簡単に目的が達成されます。
ここではstd::vectorを継承して新しいクラスを作成しています。

スポンサードリンク

C++クラス継承のサンプルプログラム

それでは最初の仕様を満たすプログラムのサンプルを紹介します。

MyVectorというクラスがvector<int>を継承してvector<vector<int>>としています。
そして、このクラスの中のgetVectorというメソッドの中で、vector::begin()と親クラスのメソッドを呼び出しているところがミソです。
Javaだとsuperで呼び出すところです。
このようにvectorとかSTL(標準テンプレートライブラリ)を継承して新しいクラスを作ることができます。
実行結果は以下の通りです。

まとめ:クラスの継承

C++やJavaではクラスを継承して新しいクラスを作ると場合によりとても便利です。
標準のクラスを継承することも可能です。
クラスの記述方法は
C++だとchildClass : ParentClass
JavaだとchildClass extends ParentClass
です。
メソッドの呼び出し方法は
C++だとParentClass::メソッド名
Javaだとsuper.メソッド名
です。

 

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です