私は C++ を学んでいますが、ちょっとした問題があります。を含むクラスがありますvector<int>
。外部からこれvector<int>
にアクセスできる必要があるため、その要素を追加/削除/取得できる必要があります。
オブジェクトを新しいインスタンスでオーバーライドすることはできません。これはそのようなクラスの例です(最小化されています):
class MyClass
{
public:
vector<int>& vec() { return _vec; }
private:
vector<int> _vec;
};
たとえば、次のコードは機能します。
MyClass x;
x.vec().push_back(0);
x.vec().push_back(7);
x.vec().push_back(9);
cout << c.vec().size() << endl;
残念ながら、次のコードも機能します。
MyClass x;
x.vec() = vector<int>();
私はこれを禁止したいのですが、 type のポインターを返す解決策しか見つかりませんでしたvector<int> *
。しかし、ポインターは「悪」であり、直接使用するべきではなく、スマートポインターを使用する必要があることを学びました。この問題にはスマートポインターは役に立たないと思うので、この単純な問題を解決する方法がわかりません:-/
それとも、単純なポインターが最もクリーンなソリューションですか?
よろしくお願いします
ケビン
-編集-
一般的に、次の C# クラスのように使用できるものを作成するのが好きです。
public class MyClass
{
public List<int> List { get; private set; }
public MyClass()
{
List = new List<int>();
}
}
これは単なる例であり、これを C++ で作成する方法を考えただけです。vector<int>
たぶん、List<int>
他のクラスに含めるよりもはるかに複雑なクラスがある場合があります。
しかし、内部オブジェクトに独自のメソッド (= インターフェイス) を定義することによってのみ、これを行うことができるかもしれません。