1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#include <iostream> #include <vector> using namespace std; // 拥有一个或多个纯虚函数的类,称为抽象类 // 抽象类应该将析构函数定义为虚函数,这样在delete抽象类指针的时候, // 派生类和抽象类的析构函数才能都被调用 class Shap { public: virtual void Draw() = 0; virtual ~Shap() {} }; class Circle : public Shap { public: void Draw() { cout << "Circle Draw ..." << endl; } ~Circle() { cout << "Circle Destructor" << endl; } }; class Square : public Shap { public: void Draw() { cout << "Square Draw ..." << endl; } ~Square() { cout << "Square Destructor" << endl; } }; void DrawAllShap(const vector<Shap*>& vecShap) { vector<Shap*>::const_iterator it; for (it = vecShap.begin(); it != vecShap.end(); ++it) (*it)->Draw(); } void DeleteAllShap(const vector<Shap*>& vecShap) { vector<Shap*>::const_iterator it; for (it = vecShap.begin(); it != vecShap.end(); ++it) delete(*it); } int main() { // Shap shap; // 不能实例化抽象类 vector<Shap*> vecShap; Shap* shap; shap = new Circle; vecShap.push_back(shap); shap = new Square; vecShap.push_back(shap); DrawAllShap(vecShap); DeleteAllShap(vecShap); return 0; } |
转载请注明:Imekaku-Blog » 【C++语法实践】11-C++ 纯虚函数