大学での基本的な C++ の講義でこれを行う必要があるため、明確にするために、許可されていれば STL を使用していたでしょう。
問題: "shape3d" という名前のクラスがあり、そこからクラス "cube" と "sphere" を派生させました。ここで、「shape3d_stack」を実装する必要があります。これは、「cube」および「sphere」タイプのオブジェクトを保持できることを意味します。これには配列を使用しましたが、int のスタックでこれを実行しようとすると、非常にうまく機能しました。私はそれを次のようにしようとしました:
shape3d_stack.cpp:
15 // more stuff
16
17 shape3d_stack::shape3d_stack (unsigned size) :
18 array_ (NULL),
19 count_ (0),
20 size_ (size)
21 { array_ = new shape3d[size]; }
22
23 // more stuff
残念ながら、コンパイラは次のように教えてくれます。
g++ -Wall -O2 -pedantic -I../../UnitTest++/src/ -c shape3d_stack.cpp -o shape3d_stack.o
shape3d_stack.cpp: In constructor ‘shape3d_stack::shape3d_stack(unsigned int)’:
shape3d_stack.cpp:21: error: cannot allocate an object of abstract type ‘shape3d’
shape3d.hpp:10: note: because the following virtual functions are pure within ‘shape3d’:
shape3d.hpp:16: note: virtual double shape3d::area() const
shape3d.hpp:17: note: virtual double shape3d::volume() const
これは、私自身が引き起こしたある種の本当に醜い設計エラーに違いないと思います。では、スタックで「shape3d」から派生したすべての種類のオブジェクトを使用する正しい方法はどのようになるでしょうか?