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

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Class/virtual_function&amp;diff=1332&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Class/virtual_function&amp;diff=1332&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:06Z</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://www.cppe.ru/index.php?title=C%2B%2B/Class/virtual_function&amp;diff=1333&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Class/virtual_function&amp;diff=1333&amp;oldid=prev"/>
				<updated>2010-05-25T10:25:36Z</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;==A base class reference is used to access 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;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class base {&lt;br /&gt;
public:&lt;br /&gt;
  virtual void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is base&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived1 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived1&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived2 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived2&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
// Use a base class reference parameter.&lt;br /&gt;
void f(base &amp;amp;r) {&lt;br /&gt;
  r.vfunc();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  base b;&lt;br /&gt;
  derived1 d1;&lt;br /&gt;
  derived2 d2;&lt;br /&gt;
   &lt;br /&gt;
  f(b); // pass a base object to f()&lt;br /&gt;
  f(d1); // pass a derived1 object to f()&lt;br /&gt;
  f(d2); // pass a derived2 object to f()&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Abstract classes by virtual function with no body==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Animal{&lt;br /&gt;
public:&lt;br /&gt;
    Animal(int health = 100);&lt;br /&gt;
    virtual void Greet() const = 0;   //pure virtual member function&lt;br /&gt;
    virtual void DisplayHealth() const;&lt;br /&gt;
protected:&lt;br /&gt;
    int m_Health;&lt;br /&gt;
};&lt;br /&gt;
Animal::Animal(int health): m_Health(health){}&lt;br /&gt;
void Animal::DisplayHealth() const{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Health: &amp;quot; &amp;lt;&amp;lt; m_Health &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
class Orc : public Animal{&lt;br /&gt;
public:&lt;br /&gt;
    Orc(int health = 120);&lt;br /&gt;
    virtual void Greet() const;&lt;br /&gt;
};&lt;br /&gt;
Orc::Orc(int health):&lt;br /&gt;
    Animal(health)&lt;br /&gt;
{}&lt;br /&gt;
void Orc::Greet() const&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The orc grunts hello.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Animal* pAnimal = new Orc();&lt;br /&gt;
    pAnimal-&amp;gt;Greet();&lt;br /&gt;
    pAnimal-&amp;gt;DisplayHealth();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Call parent 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;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Book&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual string getDescription() { return &amp;quot;Book&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
class Paperback : public Book&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual string getDescription() { &lt;br /&gt;
    return &amp;quot;Paperback &amp;quot; + Book::getDescription(); &lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
class Romance : public Paperback&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual string getDescription() { &lt;br /&gt;
    return &amp;quot;Romance &amp;quot; + Paperback::getDescription(); &lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
class Technical : public Book&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  virtual string getDescription() { &lt;br /&gt;
    return &amp;quot;Technical &amp;quot; + Book::getDescription();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  Romance novel;&lt;br /&gt;
  Book book;&lt;br /&gt;
  cout &amp;lt;&amp;lt; novel.getDescription() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  cout &amp;lt;&amp;lt; book.getDescription(); &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Illustration of the Use of Virtual Inheritance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
typedef int HANDS;&lt;br /&gt;
enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown } ;&lt;br /&gt;
class Animal        &lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    Animal(int);&lt;br /&gt;
    virtual ~Animal() { cout &amp;lt;&amp;lt; &amp;quot;Animal destructor...\n&amp;quot;; }&lt;br /&gt;
    virtual int GetAge() const { return itsAge; }&lt;br /&gt;
    virtual void SetAge(int age) { itsAge = age; }&lt;br /&gt;
  private:&lt;br /&gt;
    int itsAge;&lt;br /&gt;
};&lt;br /&gt;
Animal::Animal(int age):&lt;br /&gt;
itsAge(age)&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Animal constructor...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
class Horse : virtual public Animal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    Horse(COLOR color, HANDS height, int age);&lt;br /&gt;
    virtual ~Horse() { cout &amp;lt;&amp;lt; &amp;quot;Horse destructor...\n&amp;quot;; }&lt;br /&gt;
    virtual void Whinny()const { cout &amp;lt;&amp;lt; &amp;quot;Whinny!... &amp;quot;; }&lt;br /&gt;
    virtual HANDS GetHeight() const { return itsHeight; }&lt;br /&gt;
    virtual COLOR GetColor() const { return itsColor; }&lt;br /&gt;
  protected:&lt;br /&gt;
    HANDS itsHeight;&lt;br /&gt;
    COLOR itsColor;&lt;br /&gt;
};&lt;br /&gt;
Horse::Horse(COLOR color, HANDS height, int age):&lt;br /&gt;
Animal(age),&lt;br /&gt;
itsColor(color),itsHeight(height)&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Horse constructor...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
class Bird : virtual public Animal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    Bird(COLOR color, bool migrates, int age);&lt;br /&gt;
    virtual ~Bird() {cout &amp;lt;&amp;lt; &amp;quot;Bird destructor...\n&amp;quot;;  }&lt;br /&gt;
    virtual void Chirp()const { cout &amp;lt;&amp;lt; &amp;quot;Chirp... &amp;quot;;  }&lt;br /&gt;
    virtual void Fly()const{ cout &amp;lt;&amp;lt; &amp;quot;I can fly! I can fly! I can fly! &amp;quot;; }&lt;br /&gt;
    virtual COLOR GetColor()const { return itsColor; }&lt;br /&gt;
    virtual bool GetMigration() const { return itsMigration; }&lt;br /&gt;
  protected:&lt;br /&gt;
    COLOR itsColor;&lt;br /&gt;
    bool itsMigration;&lt;br /&gt;
};&lt;br /&gt;
Bird::Bird(COLOR color, bool migrates, int age):&lt;br /&gt;
Animal(age),&lt;br /&gt;
itsColor(color), itsMigration(migrates)&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Bird constructor...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
class Pegasus : public Horse, public Bird&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    void Chirp()const { Whinny(); }&lt;br /&gt;
    Pegasus(COLOR, HANDS, bool, long, int);&lt;br /&gt;
    virtual ~Pegasus() {cout &amp;lt;&amp;lt; &amp;quot;Pegasus destructor...\n&amp;quot;;}&lt;br /&gt;
    virtual long GetNumberBelievers() const&lt;br /&gt;
         { return  itsNumberBelievers; }&lt;br /&gt;
    virtual COLOR GetColor()const { return Horse::itsColor; }&lt;br /&gt;
  private:&lt;br /&gt;
    long itsNumberBelievers;&lt;br /&gt;
};&lt;br /&gt;
Pegasus::Pegasus(&lt;br /&gt;
   COLOR aColor,&lt;br /&gt;
   HANDS height,&lt;br /&gt;
   bool migrates,&lt;br /&gt;
   long NumBelieve,&lt;br /&gt;
   int age):&lt;br /&gt;
   Horse(aColor, height,age),&lt;br /&gt;
   Bird(aColor, migrates,age),&lt;br /&gt;
   Animal(age*2),&lt;br /&gt;
   itsNumberBelievers(NumBelieve)&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Pegasus constructor...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   Pegasus *pPeg = new Pegasus(Red, 5, true, 10, 2);&lt;br /&gt;
   int age = pPeg-&amp;gt;GetAge();&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;This pegasus is &amp;quot; &amp;lt;&amp;lt; age &amp;lt;&amp;lt; &amp;quot; years old.\n&amp;quot;;&lt;br /&gt;
   delete pPeg;&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&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;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&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 double GetArea() = 0;&lt;br /&gt;
    virtual double GetPerim()= 0;&lt;br /&gt;
    virtual void Draw() = 0;&lt;br /&gt;
  private:&lt;br /&gt;
};&lt;br /&gt;
void Shape::Draw()&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Abstract drawing mechanism!\n&amp;quot;;&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;
    virtual ~Circle(){}&lt;br /&gt;
    double GetArea() { return 3.14 * itsRadius * itsRadius; }&lt;br /&gt;
    double GetPerim() { return 2 * 3.14 * 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;
void Circle::Draw()&lt;br /&gt;
{&lt;br /&gt;
   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;
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;
    double GetArea() { return itsLength * itsWidth; }&lt;br /&gt;
    double 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;
void Rectangle::Draw(){&lt;br /&gt;
   for (int i = 0; i&amp;lt;itsLength; i++){&lt;br /&gt;
      for (int j = 0; j&amp;lt;itsWidth; j++)&lt;br /&gt;
         cout &amp;lt;&amp;lt; &amp;quot;x &amp;quot;;&lt;br /&gt;
   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;
    virtual ~Square(){}&lt;br /&gt;
    double GetPerim() {return 4 * GetLength();}&lt;br /&gt;
};&lt;br /&gt;
Square::Square(int len):&lt;br /&gt;
Rectangle(len,len)&lt;br /&gt;
{}&lt;br /&gt;
Square::Square(int len, int width):Rectangle(len,width){&lt;br /&gt;
   if (GetLength() != GetWidth())&lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;Error, not a square... a Rectangle??\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   Shape * sp;&lt;br /&gt;
   sp = new Circle(5);&lt;br /&gt;
   sp-&amp;gt;Draw();&lt;br /&gt;
   delete sp;&lt;br /&gt;
   &lt;br /&gt;
   sp = new Rectangle(4,6);&lt;br /&gt;
   sp-&amp;gt;Draw();&lt;br /&gt;
   delete sp;&lt;br /&gt;
   &lt;br /&gt;
   sp = new Square (5);&lt;br /&gt;
   sp-&amp;gt;Draw();&lt;br /&gt;
   delete sp;&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Multiple Virtual 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;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
     Mammal():itsAge(1) {  }&lt;br /&gt;
     virtual ~Mammal() { }&lt;br /&gt;
     virtual void Speak() const { cout &amp;lt;&amp;lt; &amp;quot;Mammal speak!\n&amp;quot;; }&lt;br /&gt;
  protected:&lt;br /&gt;
     int itsAge;&lt;br /&gt;
};&lt;br /&gt;
class Dog : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Woof!\n&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
class Cat : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Meow!\n&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Horse : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Winnie!\n&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
class Pig : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Oink!\n&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   Mammal* theArray[5];&lt;br /&gt;
   Mammal* ptr;&lt;br /&gt;
   ptr = new Dog;&lt;br /&gt;
   theArray[0] = ptr;&lt;br /&gt;
   ptr = new Cat;&lt;br /&gt;
   theArray[1] = ptr;&lt;br /&gt;
   ptr = new Horse;&lt;br /&gt;
   theArray[2] = ptr;&lt;br /&gt;
   ptr = new Pig;&lt;br /&gt;
   theArray[3] = ptr;&lt;br /&gt;
   ptr = new Mammal;&lt;br /&gt;
   theArray[4] = ptr;&lt;br /&gt;
   &lt;br /&gt;
   for (int i=0;i&amp;lt;5;i++)&lt;br /&gt;
      theArray[i]-&amp;gt;Speak();&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Override non-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;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Base &lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
   void display(void) { cout &amp;lt;&amp;lt; &amp;quot;This is the base class&amp;quot; &amp;lt;&amp;lt; endl; };&lt;br /&gt;
};&lt;br /&gt;
class Derived: public Base &lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
   void display(void) { cout &amp;lt;&amp;lt; &amp;quot;This is the derived class&amp;quot; &amp;lt;&amp;lt; endl; };&lt;br /&gt;
};&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   Derived my_class;&lt;br /&gt;
   my_class.display();&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pure Virtual Functions as a prototype==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class number {&lt;br /&gt;
protected:&lt;br /&gt;
  int val;&lt;br /&gt;
public:&lt;br /&gt;
  void setval(int i) { val = i; }&lt;br /&gt;
   &lt;br /&gt;
  // show() is a pure virtual function&lt;br /&gt;
  virtual void show() = 0;&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class hextype : public number {&lt;br /&gt;
public:&lt;br /&gt;
  void show() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; val &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class dectype : public number {&lt;br /&gt;
public:&lt;br /&gt;
  void show() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; val &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class octtype : public number {&lt;br /&gt;
public:&lt;br /&gt;
  void show() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; val &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  dectype d;&lt;br /&gt;
  hextype h;&lt;br /&gt;
  octtype o;&lt;br /&gt;
   &lt;br /&gt;
  d.setval(20);&lt;br /&gt;
  d.show(); // displays 20 - decimal&lt;br /&gt;
   &lt;br /&gt;
  h.setval(20);&lt;br /&gt;
  h.show(); // displays 14 - hexadecimal&lt;br /&gt;
   &lt;br /&gt;
  o.setval(20);&lt;br /&gt;
  o.show();  // displays 24 - octal&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Virtual Attribute Is Inherited==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class base {&lt;br /&gt;
public:&lt;br /&gt;
  virtual void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is base&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived1 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived1&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
/* derived2 inherits virtual function vfunc()&lt;br /&gt;
   from derived1. */&lt;br /&gt;
class derived2 : public derived1 {&lt;br /&gt;
public:&lt;br /&gt;
  // vfunc() is still virtual&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived2&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  base *p, b;&lt;br /&gt;
  derived1 d1;&lt;br /&gt;
  derived2 d2;&lt;br /&gt;
   &lt;br /&gt;
  // point to base&lt;br /&gt;
  p = &amp;amp;b;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access base&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived1&lt;br /&gt;
  p = &amp;amp;d1;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access derived1&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived2&lt;br /&gt;
  p = &amp;amp;d2;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access derived2&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Virtual Functions to control the behaviour==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class convert {&lt;br /&gt;
protected:&lt;br /&gt;
  double val1;  // initial value&lt;br /&gt;
  double val2;  // converted value&lt;br /&gt;
public:&lt;br /&gt;
  convert(double i) {&lt;br /&gt;
    val1 = i;&lt;br /&gt;
  }&lt;br /&gt;
  double getconv() { return val2; }&lt;br /&gt;
  double getinit() { return val1; }&lt;br /&gt;
   &lt;br /&gt;
  virtual void compute() = 0;&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
// Liters to gallons.&lt;br /&gt;
class l_to_g : public convert {&lt;br /&gt;
public:&lt;br /&gt;
  l_to_g(double i) : convert(i) { }&lt;br /&gt;
  void compute() {&lt;br /&gt;
    val2 = val1 / 3.7854;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
// Fahrenheit to Celsius&lt;br /&gt;
class f_to_c : public convert {&lt;br /&gt;
public:&lt;br /&gt;
  f_to_c(double i) : convert(i) { }&lt;br /&gt;
  void compute() {&lt;br /&gt;
    val2 = (val1-32) / 1.8;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  convert *p;  // pointer to base class&lt;br /&gt;
   &lt;br /&gt;
  l_to_g lgob(4);&lt;br /&gt;
  f_to_c fcob(70);&lt;br /&gt;
   &lt;br /&gt;
  // use virtual function mechanism to convert&lt;br /&gt;
  p = &amp;amp;lgob;&lt;br /&gt;
  cout &amp;lt;&amp;lt; p-&amp;gt;getinit() &amp;lt;&amp;lt; &amp;quot; liters is &amp;quot;;&lt;br /&gt;
  p-&amp;gt;compute();&lt;br /&gt;
  cout &amp;lt;&amp;lt; p-&amp;gt;getconv() &amp;lt;&amp;lt; &amp;quot; gallons\n&amp;quot;;  // l_to_g&lt;br /&gt;
   &lt;br /&gt;
  p = &amp;amp;fcob;&lt;br /&gt;
  cout &amp;lt;&amp;lt; p-&amp;gt;getinit() &amp;lt;&amp;lt; &amp;quot; in Fahrenheit is &amp;quot;;&lt;br /&gt;
  p-&amp;gt;compute();&lt;br /&gt;
  cout &amp;lt;&amp;lt; p-&amp;gt;getconv() &amp;lt;&amp;lt; &amp;quot; Celsius\n&amp;quot;;  // f_to_c&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using 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;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
     Mammal():itsAge(1) { cout &amp;lt;&amp;lt; &amp;quot;Mammal constructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
     virtual ~Mammal() { cout &amp;lt;&amp;lt; &amp;quot;Mammal destructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
     void Move() const { cout &amp;lt;&amp;lt; &amp;quot;Mammal move one step&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
     virtual void Speak() const { cout &amp;lt;&amp;lt; &amp;quot;Mammal speak!&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
  protected:&lt;br /&gt;
     int itsAge;&lt;br /&gt;
};&lt;br /&gt;
class Dog : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    Dog() { cout &amp;lt;&amp;lt; &amp;quot;Dog Constructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    virtual ~Dog() { cout &amp;lt;&amp;lt; &amp;quot;Dog destructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    void WagTail() { cout &amp;lt;&amp;lt; &amp;quot;Wagging Tail...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Woof!&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    void Move()const { cout &amp;lt;&amp;lt; &amp;quot;Dog moves 5 steps...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   Mammal *pDog = new Dog;&lt;br /&gt;
   pDog-&amp;gt;Move();&lt;br /&gt;
   pDog-&amp;gt;Speak();&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual base classes.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class base {&lt;br /&gt;
public:&lt;br /&gt;
  int i;&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
// derived1 inherits base as virtual.&lt;br /&gt;
class derived1 : virtual public base {&lt;br /&gt;
public:&lt;br /&gt;
  int j;&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
// derived2 inherits base as virtual.&lt;br /&gt;
class derived2 : virtual public base {&lt;br /&gt;
public:&lt;br /&gt;
  int k;&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived3 : public derived1, public derived2 {&lt;br /&gt;
public:&lt;br /&gt;
  int sum;&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  derived3 ob;&lt;br /&gt;
   &lt;br /&gt;
  ob.i = 10; // now unambiguous&lt;br /&gt;
  ob.j = 20;&lt;br /&gt;
  ob.k = 30;&lt;br /&gt;
   &lt;br /&gt;
  // unambiguous&lt;br /&gt;
  ob.sum = ob.i + ob.j + ob.k;&lt;br /&gt;
   &lt;br /&gt;
  // unambiguous&lt;br /&gt;
  cout &amp;lt;&amp;lt; ob.i &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
  cout &amp;lt;&amp;lt; ob.j &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; ob.k &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; ob.sum;&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual Copy Constructor==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
     Mammal():itsAge(1) { cout &amp;lt;&amp;lt; &amp;quot;Mammal constructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
     virtual ~Mammal() { cout &amp;lt;&amp;lt; &amp;quot;Mammal destructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
     Mammal (const Mammal &amp;amp; rhs);&lt;br /&gt;
     virtual void Speak() const { cout &amp;lt;&amp;lt; &amp;quot;Mammal speak!&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
     virtual Mammal* Clone() { return new Mammal(*this); }&lt;br /&gt;
     int GetAge()const { return itsAge; }&lt;br /&gt;
  protected:&lt;br /&gt;
     int itsAge;&lt;br /&gt;
};&lt;br /&gt;
Mammal::Mammal (const Mammal &amp;amp; rhs):itsAge(rhs.GetAge())&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Mammal Copy Constructor...&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
class Dog : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    Dog() { cout &amp;lt;&amp;lt; &amp;quot;Dog constructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    virtual ~Dog() { cout &amp;lt;&amp;lt; &amp;quot;Dog destructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    Dog (const Dog &amp;amp; rhs);&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Woof!&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    virtual Mammal* Clone() { return new Dog(*this); }&lt;br /&gt;
};&lt;br /&gt;
Dog::Dog(const Dog &amp;amp; rhs):&lt;br /&gt;
Mammal(rhs)&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Dog copy constructor...&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
class Cat : public Mammal&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    Cat() { cout &amp;lt;&amp;lt; &amp;quot;Cat constructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    ~Cat() { cout &amp;lt;&amp;lt; &amp;quot;Cat destructor...&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    Cat (const Cat &amp;amp;);&lt;br /&gt;
    void Speak()const { cout &amp;lt;&amp;lt; &amp;quot;Meow!&amp;quot; &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    virtual Mammal* Clone() { return new Cat(*this); }&lt;br /&gt;
};&lt;br /&gt;
Cat::Cat(const Cat &amp;amp; rhs):&lt;br /&gt;
Mammal(rhs)&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Cat copy constructor...&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
enum ANIMALS { MAMMAL, DOG, CAT};&lt;br /&gt;
const int NumAnimalTypes = 3;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   Mammal *theArray[NumAnimalTypes];&lt;br /&gt;
   Mammal* ptr;&lt;br /&gt;
   ptr = new Dog;&lt;br /&gt;
   theArray[0] = ptr;&lt;br /&gt;
   ptr = new Cat;&lt;br /&gt;
   theArray[1] = ptr;&lt;br /&gt;
   ptr = new Mammal;&lt;br /&gt;
   theArray[2] = ptr;&lt;br /&gt;
   Mammal *OtherArray[NumAnimalTypes];&lt;br /&gt;
   for (int i=0;i&amp;lt;NumAnimalTypes;i++)&lt;br /&gt;
   {&lt;br /&gt;
      theArray[i]-&amp;gt;Speak();&lt;br /&gt;
      OtherArray[i] = theArray[i]-&amp;gt;Clone();&lt;br /&gt;
   }&lt;br /&gt;
   for (int i=0;i&amp;lt;NumAnimalTypes;i++)&lt;br /&gt;
      OtherArray[i]-&amp;gt;Speak();&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual function and two subclasses==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&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) {  &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;
// who() not defined  &lt;br /&gt;
};  &lt;br /&gt;
     &lt;br /&gt;
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(); &lt;br /&gt;
     &lt;br /&gt;
  p = &amp;amp;first_obj;  &lt;br /&gt;
  p-&amp;gt;who();   &lt;br /&gt;
     &lt;br /&gt;
  p = &amp;amp;second_obj;  &lt;br /&gt;
  p-&amp;gt;who();  &lt;br /&gt;
     &lt;br /&gt;
  return 0;  &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==virtual function from base and derived classes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Base &lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
   virtual void show_message(void) { cout &amp;lt;&amp;lt; &amp;quot;Base class message&amp;quot; &amp;lt;&amp;lt; endl; };&lt;br /&gt;
   virtual void show_reverse(void) = 0;&lt;br /&gt;
};&lt;br /&gt;
class Derived : public Base &lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
   virtual void show_message(void) { cout &amp;lt;&amp;lt; &amp;quot;Derived class message&amp;quot; &amp;lt;&amp;lt; endl; };&lt;br /&gt;
   virtual void show_reverse(void) { cout &amp;lt;&amp;lt; strrev(&amp;quot;Derived class message&amp;quot;) &amp;lt;&amp;lt; endl; };&lt;br /&gt;
};&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   Base *poly = new Derived;&lt;br /&gt;
   poly-&amp;gt;show_message();&lt;br /&gt;
   poly-&amp;gt;show_reverse();&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual function in three level inheritance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class base {&lt;br /&gt;
public:&lt;br /&gt;
  virtual void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is base&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived1 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived1&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived2 : public derived1 {&lt;br /&gt;
public:&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  base *p, b;&lt;br /&gt;
  derived1 d1;&lt;br /&gt;
  derived2 d2;&lt;br /&gt;
   &lt;br /&gt;
  // point to base&lt;br /&gt;
  p = &amp;amp;b;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access base&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived1&lt;br /&gt;
  p = &amp;amp;d1;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access derived1&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived2&lt;br /&gt;
  p = &amp;amp;d2;&lt;br /&gt;
  p-&amp;gt;vfunc(); // use derived1&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==virtual functions accessed from pointer==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&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 show(){ cout &amp;lt;&amp;lt; &amp;quot;Base\n&amp;quot;; }  &lt;br /&gt;
    };  &lt;br /&gt;
  class Derv1 : public Base{  &lt;br /&gt;
     public:  &lt;br /&gt;
        void show(){ cout &amp;lt;&amp;lt; &amp;quot;Derv1\n&amp;quot;; }  &lt;br /&gt;
  };  &lt;br /&gt;
  class Derv2 : public Base{  &lt;br /&gt;
     public:  &lt;br /&gt;
        void show(){ cout &amp;lt;&amp;lt; &amp;quot;Derv2\n&amp;quot;; }  &lt;br /&gt;
    };  &lt;br /&gt;
  int main(){  &lt;br /&gt;
     Derv1 dv1;           &lt;br /&gt;
     Derv2 dv2;           &lt;br /&gt;
     Base* ptr;           &lt;br /&gt;
    &lt;br /&gt;
     ptr = &amp;amp;dv1;          &lt;br /&gt;
     ptr-&amp;gt;show();         &lt;br /&gt;
    &lt;br /&gt;
     ptr = &amp;amp;dv2;          &lt;br /&gt;
     ptr-&amp;gt;show();         &lt;br /&gt;
     return 0;  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual Functions and Polymorphism==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class base {&lt;br /&gt;
public:&lt;br /&gt;
  virtual void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is base&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived1 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived1&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived2 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived2&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  base *p, b;&lt;br /&gt;
  derived1 d1;&lt;br /&gt;
  derived2 d2;&lt;br /&gt;
   &lt;br /&gt;
  // point to base&lt;br /&gt;
  p = &amp;amp;b;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access base&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived1&lt;br /&gt;
  p = &amp;amp;d1;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access derived1&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived2&lt;br /&gt;
  p = &amp;amp;d2;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access derived2&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual Functions Are Hierarchical==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
class base {&lt;br /&gt;
public:&lt;br /&gt;
  virtual void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is base&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived1 : public base {&lt;br /&gt;
public:&lt;br /&gt;
  void vfunc() {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;This is derived1&amp;quot;s vfunc().\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
class derived2 : public base {&lt;br /&gt;
public:&lt;br /&gt;
// vfunc() not overridden by derived2, base&amp;quot;s is used&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  base *p, b;&lt;br /&gt;
  derived1 d1;&lt;br /&gt;
  derived2 d2;&lt;br /&gt;
   &lt;br /&gt;
  // point to base&lt;br /&gt;
  p = &amp;amp;b;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access base&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived1&lt;br /&gt;
  p = &amp;amp;d1;&lt;br /&gt;
  p-&amp;gt;vfunc(); // access derived1&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  // point to derived2&lt;br /&gt;
  p = &amp;amp;d2;&lt;br /&gt;
  p-&amp;gt;vfunc(); // use base&amp;quot;s vfunc()&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==virtual functions with person class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;  &lt;br /&gt;
  using namespace std;  &lt;br /&gt;
  class person{  &lt;br /&gt;
     protected:  &lt;br /&gt;
        char name[40];  &lt;br /&gt;
     public:  &lt;br /&gt;
        void getName()  &lt;br /&gt;
           { cout &amp;lt;&amp;lt; &amp;quot;   Enter name: &amp;quot;; cin &amp;gt;&amp;gt; name; }  &lt;br /&gt;
        void putName()  &lt;br /&gt;
           { cout &amp;lt;&amp;lt; &amp;quot;Name is: &amp;quot; &amp;lt;&amp;lt; name &amp;lt;&amp;lt; endl; }  &lt;br /&gt;
        virtual void getData() = 0;&lt;br /&gt;
        virtual bool isOutstanding() = 0;&lt;br /&gt;
    };  &lt;br /&gt;
  class student : public person{  &lt;br /&gt;
     private:  &lt;br /&gt;
        float gpa;             &lt;br /&gt;
     public:  &lt;br /&gt;
        void getData(){  &lt;br /&gt;
           person::getName();  &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;   Enter student&amp;quot;s GPA: &amp;quot;; cin &amp;gt;&amp;gt; gpa;  &lt;br /&gt;
        }  &lt;br /&gt;
        bool isOutstanding()  &lt;br /&gt;
        { &lt;br /&gt;
           return (gpa &amp;gt; 3.5) ? true : false; &lt;br /&gt;
        }  &lt;br /&gt;
  };  &lt;br /&gt;
  class professor : public person{  &lt;br /&gt;
     private:  &lt;br /&gt;
        int numPubs;             &lt;br /&gt;
     public:  &lt;br /&gt;
        void getData(){  &lt;br /&gt;
           person::getName();  &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;   Enter number of professor&amp;quot;s publications: &amp;quot;;  &lt;br /&gt;
           cin &amp;gt;&amp;gt; numPubs;  &lt;br /&gt;
        }  &lt;br /&gt;
        bool isOutstanding()  &lt;br /&gt;
        { &lt;br /&gt;
           return (numPubs &amp;gt; 100) ? true : false; &lt;br /&gt;
        }  &lt;br /&gt;
  };  &lt;br /&gt;
  int main(){  &lt;br /&gt;
     person* persPtr[100];&lt;br /&gt;
     int n = 0;           &lt;br /&gt;
     char choice;  &lt;br /&gt;
    &lt;br /&gt;
     do {  &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Enter student or professor (s/p): &amp;quot;;  &lt;br /&gt;
        cin &amp;gt;&amp;gt; choice;  &lt;br /&gt;
        if(choice==&amp;quot;s&amp;quot;)   &lt;br /&gt;
           persPtr[n] = new student;     &lt;br /&gt;
        else                             &lt;br /&gt;
           persPtr[n] = new professor;   &lt;br /&gt;
        persPtr[n++]-&amp;gt;getData();         &lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;   Enter another (y/n)? &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; choice;  &lt;br /&gt;
     } while( choice==&amp;quot;y&amp;quot; );          &lt;br /&gt;
    &lt;br /&gt;
     for(int j=0; j&amp;lt;n; j++){                                &lt;br /&gt;
        persPtr[j]-&amp;gt;putName();           &lt;br /&gt;
        if( persPtr[j]-&amp;gt;isOutstanding() )  &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;   This person is outstanding\n&amp;quot;;  &lt;br /&gt;
     }  &lt;br /&gt;
     return 0;  &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==virtual members==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class CPolygon {&lt;br /&gt;
  protected:&lt;br /&gt;
    int width, height;&lt;br /&gt;
  public:&lt;br /&gt;
    void set_values (int a, int b)&lt;br /&gt;
    { width=a; height=b; }&lt;br /&gt;
    virtual int area ()&lt;br /&gt;
    { return (0); }&lt;br /&gt;
};&lt;br /&gt;
class CRectangle: public CPolygon {&lt;br /&gt;
  public:&lt;br /&gt;
    int area ()&lt;br /&gt;
      { return (width * height); }&lt;br /&gt;
};&lt;br /&gt;
class CTriangle: public CPolygon {&lt;br /&gt;
  public:&lt;br /&gt;
    int area ()&lt;br /&gt;
      { return (width * height / 2); }&lt;br /&gt;
};&lt;br /&gt;
int main () {&lt;br /&gt;
  CRectangle rect;&lt;br /&gt;
  CTriangle trgl;&lt;br /&gt;
  CPolygon poly;&lt;br /&gt;
  CPolygon * ppoly1 = &amp;amp;rect;&lt;br /&gt;
  CPolygon * ppoly2 = &amp;amp;trgl;&lt;br /&gt;
  CPolygon * ppoly3 = &amp;amp;poly;&lt;br /&gt;
  ppoly1-&amp;gt;set_values (4,5);&lt;br /&gt;
  ppoly2-&amp;gt;set_values (4,5);&lt;br /&gt;
  ppoly3-&amp;gt;set_values (4,5);&lt;br /&gt;
  cout &amp;lt;&amp;lt; ppoly1-&amp;gt;area() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  cout &amp;lt;&amp;lt; ppoly2-&amp;gt;area() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  cout &amp;lt;&amp;lt; ppoly3-&amp;gt;area() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>