A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FClass%2Fvirtual_function</id>
		<title>C++ Tutorial/Class/virtual function - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FClass%2Fvirtual_function"/>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Class/virtual_function&amp;action=history"/>
		<updated>2026-04-09T02:03:39Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Class/virtual_function&amp;diff=2305&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Class/virtual_function&amp;diff=2305&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Class/virtual_function&amp;diff=2306&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Class/virtual_function&amp;diff=2306&amp;oldid=prev"/>
				<updated>2010-05-25T10:29:25Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Access base class&amp;quot;s virtual if derived class does not redefine it==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt; &lt;br /&gt;
using namespace std; &lt;br /&gt;
 &lt;br /&gt;
class BaseClass { &lt;br /&gt;
public: &lt;br /&gt;
  virtual void who() { &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Base\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
class DerivedClass1 : public BaseClass { &lt;br /&gt;
public: &lt;br /&gt;
  void who() { &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;First derivation\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
class DerivedClass2 : public BaseClass { &lt;br /&gt;
// who() not defined &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
int main() &lt;br /&gt;
{ &lt;br /&gt;
  BaseClass base_obj; &lt;br /&gt;
  BaseClass *p; &lt;br /&gt;
  DerivedClass1 DerivedClass1_obj; &lt;br /&gt;
  DerivedClass2 DerivedClass2_obj; &lt;br /&gt;
 &lt;br /&gt;
  p = &amp;amp;base_obj; &lt;br /&gt;
  p-&amp;gt;who();  // access BaseClass&amp;quot;s who() &lt;br /&gt;
 &lt;br /&gt;
  p = &amp;amp;DerivedClass1_obj; &lt;br /&gt;
  p-&amp;gt;who(); // access DerivedClass1&amp;quot;s who() &lt;br /&gt;
 &lt;br /&gt;
  p = &amp;amp;DerivedClass2_obj; &lt;br /&gt;
  p-&amp;gt;who(); /* access BaseClass&amp;quot;s who() because &lt;br /&gt;
               DerivedClass2 does not redefine it */ &lt;br /&gt;
 &lt;br /&gt;
  return 0; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Base&lt;br /&gt;
First derivation&lt;br /&gt;
Base&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==A pure virtual function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt; &lt;br /&gt;
#include &amp;lt;cstring&amp;gt; &lt;br /&gt;
using namespace std; &lt;br /&gt;
 &lt;br /&gt;
class Shape { &lt;br /&gt;
  double width; &lt;br /&gt;
  double height; &lt;br /&gt;
 &lt;br /&gt;
  char name[20]; &lt;br /&gt;
public: &lt;br /&gt;
 &lt;br /&gt;
  Shape() { &lt;br /&gt;
    width = height = 0.0; &lt;br /&gt;
    strcpy(name, &amp;quot;unknown&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  Shape(double w, double h, char *n) { &lt;br /&gt;
    width = w; &lt;br /&gt;
    height = h; &lt;br /&gt;
    strcpy(name, n); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  Shape(double x, char *n) { &lt;br /&gt;
    width = height = x; &lt;br /&gt;
    strcpy(name, n); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  void display() { &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Width and height are &amp;quot; &amp;lt;&amp;lt; width &amp;lt;&amp;lt; &amp;quot; and &amp;quot; &amp;lt;&amp;lt; height &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  double getWidth() { return width; } &lt;br /&gt;
  double getHeight() { return height; } &lt;br /&gt;
  void setWidth(double w) { width = w; } &lt;br /&gt;
  void setHeight(double h) { height = h; } &lt;br /&gt;
  char *getName() { return name; } &lt;br /&gt;
 &lt;br /&gt;
  virtual double area() = 0; &lt;br /&gt;
 &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
class Triangle : public Shape { &lt;br /&gt;
  char style[20];&lt;br /&gt;
public: &lt;br /&gt;
 &lt;br /&gt;
  Triangle() { &lt;br /&gt;
    strcpy(style, &amp;quot;unknown&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  Triangle(char *str, double w, double h) : Shape(w, h, &amp;quot;triangle&amp;quot;) { &lt;br /&gt;
    strcpy(style, str); &lt;br /&gt;
  } &lt;br /&gt;
   &lt;br /&gt;
  Triangle(double x) : Shape(x, &amp;quot;triangle&amp;quot;) { &lt;br /&gt;
    strcpy(style, &amp;quot;isosceles&amp;quot;);  &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  double area() { &lt;br /&gt;
    return getWidth() * getHeight() / 2; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  void showStyle() { &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Triangle is &amp;quot; &amp;lt;&amp;lt; style &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
class Rectangle : public Shape { &lt;br /&gt;
public: &lt;br /&gt;
 &lt;br /&gt;
  Rectangle(double w, double h) : Shape(w, h, &amp;quot;rectangle&amp;quot;) { }  &lt;br /&gt;
  &lt;br /&gt;
  Rectangle(double x) : Shape(x, &amp;quot;rectangle&amp;quot;) { }  &lt;br /&gt;
 &lt;br /&gt;
  bool isSquare() { &lt;br /&gt;
    if(getWidth() == getHeight()) &lt;br /&gt;
       return true; &lt;br /&gt;
    return false; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  double area() { &lt;br /&gt;
    return getWidth() * getHeight(); &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
int main() { &lt;br /&gt;
  Shape *shapes[4]; &lt;br /&gt;
  &lt;br /&gt;
  shapes[0] = &amp;amp;Triangle(&amp;quot;right&amp;quot;, 8.0, 12.0);  &lt;br /&gt;
  shapes[1] = &amp;amp;Rectangle(10);  &lt;br /&gt;
  shapes[2] = &amp;amp;Rectangle(10, 4);  &lt;br /&gt;
  shapes[3] = &amp;amp;Triangle(7.0);  &lt;br /&gt;
  &lt;br /&gt;
  for(int i=0; i &amp;lt; 4; i++) {  &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;object is &amp;quot; &amp;lt;&amp;lt; shapes[i]-&amp;gt;getName() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;  &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Area is &amp;quot; &amp;lt;&amp;lt; shapes[i]-&amp;gt;area() &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
 &lt;br /&gt;
  return 0; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;object is triangle&lt;br /&gt;
Area is 24.5&lt;br /&gt;
object is triangle&lt;br /&gt;
Area is 24.5&lt;br /&gt;
object is triangle&lt;br /&gt;
Area is 24.5&lt;br /&gt;
object is triangle&lt;br /&gt;
Area is 24.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==A virtual function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt; &lt;br /&gt;
using namespace std; &lt;br /&gt;
 &lt;br /&gt;
class BaseClass { &lt;br /&gt;
public: &lt;br /&gt;
  virtual void who() { // specify a virtual function &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Base\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
class DerivedClass1 : public BaseClass { &lt;br /&gt;
public: &lt;br /&gt;
  void who() { // redefine who() for DerivedClass1  &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;First derivation\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
class DerivedClass2 : public BaseClass { &lt;br /&gt;
public: &lt;br /&gt;
  void who() { // redefine who() for DerivedClass2 &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Second derivation\n&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
}; &lt;br /&gt;
 &lt;br /&gt;
int main() &lt;br /&gt;
{ &lt;br /&gt;
  BaseClass base_obj; &lt;br /&gt;
  BaseClass *p; &lt;br /&gt;
  DerivedClass1 DerivedClass1_obj; &lt;br /&gt;
  DerivedClass2 DerivedClass2_obj; &lt;br /&gt;
 &lt;br /&gt;
  p = &amp;amp;base_obj; &lt;br /&gt;
  p-&amp;gt;who();  // access BaseClass&amp;quot;s who &lt;br /&gt;
 &lt;br /&gt;
  p = &amp;amp;DerivedClass1_obj; &lt;br /&gt;
  p-&amp;gt;who(); // access DerivedClass1&amp;quot;s who &lt;br /&gt;
 &lt;br /&gt;
  p = &amp;amp;DerivedClass2_obj; &lt;br /&gt;
  p-&amp;gt;who();  // access DerivedClass2&amp;quot;s who &lt;br /&gt;
   &lt;br /&gt;
  return 0; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Base&lt;br /&gt;
First derivation&lt;br /&gt;
Second derivation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Class with only virtual methods==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class Shape&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Shape(){}&lt;br /&gt;
     virtual ~Shape(){}&lt;br /&gt;
     virtual long GetArea() = 0; &lt;br /&gt;
     virtual long GetPerim()= 0;&lt;br /&gt;
     virtual void Draw() = 0;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Circle : public Shape&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Circle(int radius):itsRadius(radius){}&lt;br /&gt;
     ~Circle(){}&lt;br /&gt;
     long GetArea() { return 3 * itsRadius * itsRadius; }&lt;br /&gt;
     long GetPerim() { return 9 * itsRadius; }&lt;br /&gt;
     void Draw();&lt;br /&gt;
 private:&lt;br /&gt;
     int itsRadius;&lt;br /&gt;
     int itsCircumference;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void Circle::Draw()&lt;br /&gt;
 {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Circle drawing \n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Rectangle : public Shape&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Rectangle(int len, int width):&lt;br /&gt;
         itsLength(len), itsWidth(width){}&lt;br /&gt;
     virtual ~Rectangle(){}&lt;br /&gt;
     virtual long GetArea() { return itsLength * itsWidth; }&lt;br /&gt;
     virtual long GetPerim() {return 2*itsLength + 2*itsWidth; }&lt;br /&gt;
     virtual int GetLength() { return itsLength; }&lt;br /&gt;
     virtual int GetWidth() { return itsWidth; }&lt;br /&gt;
     virtual void Draw();&lt;br /&gt;
 private:&lt;br /&gt;
     int itsWidth;&lt;br /&gt;
     int itsLength;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void Rectangle::Draw()&lt;br /&gt;
 {&lt;br /&gt;
     for (int i = 0; i&amp;lt;itsLength; i++)&lt;br /&gt;
     {&lt;br /&gt;
         for (int j = 0; j&amp;lt;itsWidth; j++)&lt;br /&gt;
             std::cout &amp;lt;&amp;lt; &amp;quot;x &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Square : public Rectangle&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Square(int len);&lt;br /&gt;
     Square(int len, int width);&lt;br /&gt;
     ~Square(){}&lt;br /&gt;
     long GetPerim() {return 4 * GetLength();}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Square::Square(int len):Rectangle(len,len) {}&lt;br /&gt;
 &lt;br /&gt;
 Square::Square(int len, int width):Rectangle(len,width)&lt;br /&gt;
 {&lt;br /&gt;
     if (GetLength() != GetWidth())&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Error, not a square... a Rectangle??\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     Shape * sp;&lt;br /&gt;
 &lt;br /&gt;
     sp = new Circle(5);&lt;br /&gt;
     sp-&amp;gt;Draw();&lt;br /&gt;
     &lt;br /&gt;
     sp = new Rectangle(4,6);&lt;br /&gt;
     sp-&amp;gt;Draw();&lt;br /&gt;
     &lt;br /&gt;
     sp = new Square(5);&lt;br /&gt;
     sp-&amp;gt;Draw();&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Circle drawing&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementing pure virtual functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class Shape&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Shape(){}&lt;br /&gt;
     virtual ~Shape(){}&lt;br /&gt;
     virtual long GetArea() = 0; &lt;br /&gt;
     virtual long GetPerim()= 0;&lt;br /&gt;
     virtual void Draw() = 0;&lt;br /&gt;
 private:&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void Shape::Draw()&lt;br /&gt;
 {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Abstract drawing mechanism!\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Circle : public Shape&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Circle(int radius):itsRadius(radius){}&lt;br /&gt;
     ~Circle(){}&lt;br /&gt;
     long GetArea() { return 3 * itsRadius * itsRadius; }&lt;br /&gt;
     long GetPerim() { return 9 * itsRadius; }&lt;br /&gt;
     void Draw();&lt;br /&gt;
 private:&lt;br /&gt;
     int itsRadius;&lt;br /&gt;
     int itsCircumference;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void Circle::Draw()&lt;br /&gt;
 {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Circle drawing routine here!\n&amp;quot;;&lt;br /&gt;
     Shape::Draw();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Rectangle : public Shape&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Rectangle(int len, int width):&lt;br /&gt;
         itsLength(len), itsWidth(width){}&lt;br /&gt;
     virtual ~Rectangle(){}&lt;br /&gt;
     long GetArea() { return itsLength * itsWidth; }&lt;br /&gt;
     long GetPerim() {return 2*itsLength + 2*itsWidth; }&lt;br /&gt;
     virtual int GetLength() { return itsLength; }&lt;br /&gt;
     virtual int GetWidth() { return itsWidth; }&lt;br /&gt;
     void Draw();&lt;br /&gt;
 private:&lt;br /&gt;
     int itsWidth;&lt;br /&gt;
     int itsLength;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void Rectangle::Draw()&lt;br /&gt;
 {&lt;br /&gt;
     for (int i = 0; i&amp;lt;itsLength; i++)&lt;br /&gt;
     {&lt;br /&gt;
         for (int j = 0; j&amp;lt;itsWidth; j++)&lt;br /&gt;
             std::cout &amp;lt;&amp;lt; &amp;quot;x &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     Shape::Draw();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Square : public Rectangle&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Square(int len);&lt;br /&gt;
     Square(int len, int width);&lt;br /&gt;
     ~Square(){}&lt;br /&gt;
     long GetPerim() {return 4 * GetLength();}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Square::Square(int len):Rectangle(len,len)&lt;br /&gt;
 {}&lt;br /&gt;
 &lt;br /&gt;
 Square::Square(int len, int width):Rectangle(len,width){&lt;br /&gt;
     if (GetLength() != GetWidth())&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Error, not a square... a Rectangle??\n&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     Shape * sp;&lt;br /&gt;
 &lt;br /&gt;
     sp = new Circle(5);&lt;br /&gt;
     sp-&amp;gt;Draw();&lt;br /&gt;
     sp = new Rectangle(4,6);&lt;br /&gt;
     sp-&amp;gt;Draw();&lt;br /&gt;
     sp = new Square (5);&lt;br /&gt;
     sp-&amp;gt;Draw();&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Circle drawing routine here!&lt;br /&gt;
Abstract drawing mechanism!&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x x&lt;br /&gt;
x x x x x x&lt;br /&gt;
Abstract drawing mechanism!&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
x x x x x&lt;br /&gt;
Abstract drawing mechanism!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Multiple virtual member functions called in turn==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class Animal&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     Animal():itsAge(1) {  }&lt;br /&gt;
     ~Animal() { }&lt;br /&gt;
     virtual void Speak() const { std::cout &amp;lt;&amp;lt; &amp;quot;Animal speak!\n&amp;quot;; }&lt;br /&gt;
 protected:&lt;br /&gt;
     int itsAge;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Dog : public Animal&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     void Speak()const { std::cout &amp;lt;&amp;lt; &amp;quot;Woof!\n&amp;quot;; }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Cat : public Animal&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     void Speak()const { std::cout &amp;lt;&amp;lt; &amp;quot;Meow!\n&amp;quot;; }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Horse : public Animal&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     void Speak()const { std::cout &amp;lt;&amp;lt; &amp;quot;Winnie!\n&amp;quot;; }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Pig : public Animal&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     void Speak()const { std::cout &amp;lt;&amp;lt; &amp;quot;Oink!\n&amp;quot;; }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     Animal* theArray[5];&lt;br /&gt;
     Animal* ptr;&lt;br /&gt;
     int i;&lt;br /&gt;
     theArray[0] = new Dog;&lt;br /&gt;
     theArray[1] = new Cat;&lt;br /&gt;
     theArray[2] = new Horse;&lt;br /&gt;
     theArray[3] = new Pig;&lt;br /&gt;
     theArray[4] = new Animal;&lt;br /&gt;
     &lt;br /&gt;
     for (i=0;i&amp;lt;5;i++)&lt;br /&gt;
         theArray[i]-&amp;gt;Speak();&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Woof!&lt;br /&gt;
Meow!&lt;br /&gt;
Winnie!&lt;br /&gt;
Oink!&lt;br /&gt;
Animal speak!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Virtual Functions to change the method behaviour==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;  &lt;br /&gt;
using namespace std;&lt;br /&gt;
class Base {  &lt;br /&gt;
public:  &lt;br /&gt;
  virtual void who(void) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Base\n&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
};  &lt;br /&gt;
     &lt;br /&gt;
class first_d : public Base {  &lt;br /&gt;
public:  &lt;br /&gt;
  void who(void) { // define who() relative to first_d  &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;First derivation\n&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
};  &lt;br /&gt;
     &lt;br /&gt;
class second_d : public Base {  &lt;br /&gt;
public:  &lt;br /&gt;
  void who(void) { // define who() relative to second_d  &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Second derivation\n&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
};  &lt;br /&gt;
     &lt;br /&gt;
int main(void)  &lt;br /&gt;
{  &lt;br /&gt;
  Base base_obj;  &lt;br /&gt;
  Base *p;  &lt;br /&gt;
  first_d first_obj;  &lt;br /&gt;
  second_d second_obj;  &lt;br /&gt;
     &lt;br /&gt;
  p = &amp;amp;base_obj;  &lt;br /&gt;
  p-&amp;gt;who();  // access Base&amp;quot;s who  &lt;br /&gt;
     &lt;br /&gt;
  p = &amp;amp;first_obj;  &lt;br /&gt;
  p-&amp;gt;who(); // access first_d&amp;quot;s who  &lt;br /&gt;
     &lt;br /&gt;
  p = &amp;amp;second_obj;  &lt;br /&gt;
  p-&amp;gt;who();  // access second_d&amp;quot;s who  &lt;br /&gt;
     &lt;br /&gt;
  return 0;  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use virtual function to calculate area for different shapes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;  &lt;br /&gt;
  using namespace std;&lt;br /&gt;
  class Shape {  &lt;br /&gt;
  protected:  &lt;br /&gt;
    double x, y;  &lt;br /&gt;
  public:  &lt;br /&gt;
    void set_dim(double i, double j=0) {  &lt;br /&gt;
      x = i;  &lt;br /&gt;
      y = j;  &lt;br /&gt;
    }  &lt;br /&gt;
    virtual void show_area(void) {  &lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;No area computation defined &amp;quot;;  &lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;for this class.\n&amp;quot;;  &lt;br /&gt;
    }  &lt;br /&gt;
  } ;  &lt;br /&gt;
       &lt;br /&gt;
  class triangle : public Shape {  &lt;br /&gt;
    public:  &lt;br /&gt;
      void show_area(void) {  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Triangle with height &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &amp;quot; and base &amp;quot; &amp;lt;&amp;lt; y;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; has an area of &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x * 0.5 * y &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;  &lt;br /&gt;
      }  &lt;br /&gt;
  };  &lt;br /&gt;
       &lt;br /&gt;
  class square : public Shape {  &lt;br /&gt;
    public:  &lt;br /&gt;
      void show_area(void) {  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Square with dimensions &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &amp;quot;x&amp;quot; &amp;lt;&amp;lt; y;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; has an area of &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x *  y &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;  &lt;br /&gt;
       }  &lt;br /&gt;
  };  &lt;br /&gt;
       &lt;br /&gt;
  class circle : public Shape {  &lt;br /&gt;
    public:  &lt;br /&gt;
      void show_area(void) {  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Circle with radius &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; has an area of &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; 3.14 * x * x;  &lt;br /&gt;
      }  &lt;br /&gt;
  } ;  &lt;br /&gt;
       &lt;br /&gt;
  main(void)  &lt;br /&gt;
  {  &lt;br /&gt;
    Shape *p;  &lt;br /&gt;
    triangle t; &lt;br /&gt;
    square s;  &lt;br /&gt;
    circle c;  &lt;br /&gt;
       &lt;br /&gt;
    p = &amp;amp;t;  &lt;br /&gt;
    p-&amp;gt;set_dim(10.0, 5.0);  &lt;br /&gt;
    p-&amp;gt;show_area();  &lt;br /&gt;
       &lt;br /&gt;
    p = &amp;amp;s;  &lt;br /&gt;
    p-&amp;gt;set_dim(10.0, 5.0);  &lt;br /&gt;
    p-&amp;gt;show_area();  &lt;br /&gt;
       &lt;br /&gt;
    p = &amp;amp;c;  &lt;br /&gt;
    p-&amp;gt;set_dim(9.0);  &lt;br /&gt;
    p-&amp;gt;show_area();  &lt;br /&gt;
       &lt;br /&gt;
    return 0;  &lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Why Virtual Functions: one interface, multiple methods==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;  &lt;br /&gt;
    using namespace std;       &lt;br /&gt;
  class Shape {  &lt;br /&gt;
  protected:  &lt;br /&gt;
    double x, y;  &lt;br /&gt;
  public:  &lt;br /&gt;
    void set_dim(double i, double j) {  &lt;br /&gt;
      x = i;  &lt;br /&gt;
      y = j;  &lt;br /&gt;
    }  &lt;br /&gt;
    virtual void show_area(void) {  &lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;No area computation defined &amp;quot;;  &lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;for this class.\n&amp;quot;;  &lt;br /&gt;
    }  &lt;br /&gt;
  } ;  &lt;br /&gt;
       &lt;br /&gt;
  class triangle : public Shape {  &lt;br /&gt;
    public:  &lt;br /&gt;
      void show_area(void) {  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Triangle with height &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &amp;quot; and base &amp;quot; &amp;lt;&amp;lt; y;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; has an area of &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x * 0.5 * y &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;  &lt;br /&gt;
      }  &lt;br /&gt;
  };  &lt;br /&gt;
       &lt;br /&gt;
  class square : public Shape {  &lt;br /&gt;
    public:  &lt;br /&gt;
      void show_area(void) {  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Square with dimensions &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &amp;quot;x&amp;quot; &amp;lt;&amp;lt; y;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; has an area of &amp;quot;;  &lt;br /&gt;
        cout &amp;lt;&amp;lt; x *  y &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;  &lt;br /&gt;
      }  &lt;br /&gt;
  };  &lt;br /&gt;
       &lt;br /&gt;
  main(void)  &lt;br /&gt;
  {  &lt;br /&gt;
    Shape *p;  &lt;br /&gt;
       &lt;br /&gt;
    triangle t; &lt;br /&gt;
    square s;  &lt;br /&gt;
       &lt;br /&gt;
    p = &amp;amp;t;  &lt;br /&gt;
    p-&amp;gt;set_dim(10.0, 5.0);  &lt;br /&gt;
    p-&amp;gt;show_area();  &lt;br /&gt;
    p = &amp;amp;s;  &lt;br /&gt;
    p-&amp;gt;set_dim(10.0, 5.0);  &lt;br /&gt;
    p-&amp;gt;show_area();  &lt;br /&gt;
       &lt;br /&gt;
    return 0;  &lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>