1

STL ベクトル クラスを継承して、自分で新しいクラスを作成しようとしています。ベクトルの基本プロパティを使用しますが、合計や除算などの新しい関数をいくつか追加します。ここでの問題は、そのクラスをさまざまなタイプにも実装しようとしていることです。継承とテンプレートの両方を同時に使用するにはどうすればよいですか?

以下は、助けが必要なクラス本体です。

//template <class T> 
?
class NewVector<T> : public vector<T>{

//some constructors
};

はい。STL を継承するのは得策ではありません。私はそれを知っています。しかし、私はこの継承を使用しているとしましょう。

ここで直面する問題は、コンストラクターの構築です。

このようにメインでコンストラクターを呼び出していますが、

NewVector<int> v1(3);

しかし問題は、STL ベクトルのようにこの v1 ベクトルを作成できないことです。デバッグしようとすると、サイズが 0、容量が 0 になります。コンストラクターでサイズと容量を編集するにはどうすればよいですか? 私はそれらをやろうとしましたが、管理できませんでした。

template <class T> 
class NewVector : public vector<T>{
public:

NewVector(T n){
const ArithmeticVector<T> &v1(n);
cout<<v1.size()<<endl;

    };
//some constructors
};

v1 ベクトル 0 のサイズが表示されますが、前述のように 3 を表示したいです。少しの助けがいいでしょう。

メインファイルはこちら。私はいくつかのコンストラクターを書く必要があることを知っていますが、それらは int と double の両方で動作する必要があり、クラスにそれらを行うようにどのように指示しますか?

using namespace std;
int main() {

NewVector<int> v1(3); // creating some objects
NewVector<int> v2(3); // vector elements are assigned randomly from 0 to 10
NewVector<double> v3(5);
NewVector<double> v4(5);

.....
4

2 に答える 2

3

これをしないでください!あなたが書いたコードを手に取って維持する必要はありません。std::vector が表示された場合は、何を扱っているかがすぐにわかります。あなたのクラスでは私はしません。

std::vector には仮想デストラクタがなく、いつか誰かが std::vector ポインタを使用してクラスを参照することに注意してください。

stl が採用するアルゴリズムアプローチに沿って、必要な操作を開発することを検討します。これには、関数がより広く使用されるという追加のボーナスがあります。多くの stl コンテナに渡って。

std::vector が実際にデータを格納する実際の方法が気に入らない場合は、独自のクラスを最初から作成してください。

于 2013-05-19T10:39:41.770 に答える
2

まず第一に、std::vectorおよび他の標準ライブラリ コンテナから公に継承することは、悪い考えと見なされます。

そのことを念頭に置いて、別のクラス テンプレートから継承するクラス テンプレートに必要な構文は次のとおりです。

template <class T> 
class NewVector : public vector<T>
{
// ....
};
于 2013-05-19T10:26:09.073 に答える