Я должен сделать это для основной лекции C++ в своем университете, поэтому просто чтобы быть ясным: я бы использовал STL, если мне было позволено.Использование абстрактного класса для реализации стека элементов производного класса
Проблема: У меня есть класс под названием «shape3d», из которого я получил классы «куб» и «сфера». Теперь мне нужно реализовать «shape3d_stack», который подразумевает возможность хранения объектов типов «куб» и «сфера». Я использовал для этого массивы, и он работал достаточно хорошо, когда я пытался сделать это со стеком ints. Я пытался сделать это так:
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» с моим стеком?