// pointers08.cpp #include // pair #include typedef unsigned int pixelValue; typedef std::pair pixelIndex; class Shape { public: Shape(int id) :m_id(id) {} virtual void Draw(std::vector >& bitmap) const = 0; protected: void DrawLine(pixelIndex a, pixelIndex b, std::vector >& bitmap) const { // draw a line from a to b in bitmap } private: int m_id; }; class Triangle : public Shape { public: Triangle(int id, pixelIndex a, pixelIndex b, pixelIndex c) : Shape(id), m_a(a), m_b(b), m_c(c) {} void Draw(std::vector >& bitmap) const { DrawLine(m_a, m_b, bitmap); DrawLine(m_b, m_c, bitmap); DrawLine(m_c, m_a, bitmap); } private: pixelIndex m_a; pixelIndex m_b; pixelIndex m_c; }; int main() { Triangle t(0, pixelIndex(0, 0), pixelIndex(0, 1), pixelIndex(1, 0)); Triangle* p1 = &t; Shape* p2 = &t; return 0; }