我要爲我的大學基本的C++講座做到這一點的元件的堆疊,所以僅僅是明確的:我已經使用了STL,如果我被允許。使用抽象類來實現派生
的問題:我有一個名爲「一個Shape3D」我從中派生的類「魔方」和「球」類。現在我必須實現「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」派生的各種對象的正確方式是什麼?