これまでのところ私の経験はほとんどがJavaですが、私はC++を学ぼうとしていますが、ポインタやオーバーロードなどを理解するためにまだ苦労しています。タイトルについては私を許してください。私の問題。とにかく私はこの練習を勉強している間に来て、私はいくつかの助けをしたいと思います。このエクササイズでは、クラスContainerとmain()が提供されています。クラスを拡張して、main()を適切な結果を提供するようにします。エクササイズでヌルポインタエラーが発生しました
template <typename T>
class Container
{
protected:
T * storage;
size_t num_items;
size_t storage_size;
public:
virtual void operator += (const T item) { }
virtual ~Container() { }
Container() : storage(nullptr), num_items(0), storage_size(0) { }
T operator [] (size_t index)
{
if (num_items==0)
return T(0);
return storage[index<num_items?index:num_items];
}
inline size_t size() { return num_items; }
};
void main(int argc, char* argv[])
{
Container<long> * store = new Container_ex(); // I'm suppose to fill this gap
---------------
size_t num_data;
cin >> num_data;
for (size_t i=0; i<num_data; i++)
{
long item;
cin >> item;
*store+=item;
}
for (size_t i=0; i<store->size(); i++)
std::cout << (*store)[i] << " ";
std::cout << std::endl;
delete store;
}
これまでのところこれを行っています。問題は、私が例外エラー(this->storage was nullptr)
を取得するためにオーバーロードしようとしたときですが、どんな場合でも、私はこのエクササイズでストレージの使用を完全に理解できないので、助けていただければ幸いです。
class Container_ex : public Container<long> {
public:
Container_ex() : Container() {}
~Container_ex() { delete[] storage; }
void operator += (const long item)
{
*storage = const_cast<long&>(item);
*storage = *storage + item;
num_items = num_items + 1;
storage_size = storage_size + 1;
}
};
ここで、「ストレージ」にはどのようにメモリを割り当てましたか? –
オペレータの過負荷の中でそれを行うべきですか?コンテナ内の指定されたコンストラクタがnullで初期化される –
'storage'はポインタですが、実際には*どこでも*ポイントしません。逆参照できるようにするには、どこかを指し示す必要があります。 –