// @topic T071220 Inheritance demo, pure virtual function
// @brief CPrimitive, CPrimitiveLine, CPrimitiveCircle, CPrimitiveRectangle

#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

class CPrimitive {
    virtual void draw() = 0; // pure virtual function
};//class CPrimitive

class CPrimitiveLine : public CPrimitive {
public:
    void draw() {
        cout << __FUNCTION__ << "\n";
    }
};

class CPrimitiveCircle : public CPrimitive {
public:
    void draw() {
        cout << __FUNCTION__ << "\n";
    }
};

class CPrimitiveRectangle : public CPrimitive {
public:
    void draw() {
        cout << __FUNCTION__ << "\n";
    }
};

void doit()
{
    vector< CPrimitiveLine > lines( 3 );
    CPrimitiveLine line;
    lines.push_back( line );

    vector< CPrimitiveCircle > circles( 4 );
    vector< CPrimitiveRectangle > rectangles( 5 );

    for (CPrimitiveLine line : lines) line.draw();
    for (CPrimitiveCircle circle : circles) circle.draw();
    for (CPrimitiveRectangle rectangle : rectangles) rectangle.draw();
}

int main()
{
    doit();
    system("pause");
}