x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 207

# c++ polymorphism function

Hello, I found the following code from one of the experts here, but I don't understand a lot of it.  Could someone please help me understand what the program is doing?  I understand the basics, but need help with understanding these lines.  I am not sure what teh ~ means.  Please help me understand.

class Shape
{
public:
Shape() {};
virtual ~Shape() {};
virtual void DrawShape() = 0;
};

class Circle : public Shape
{
public:
Circle() {};
virtual ~Circle() {};
virtual void DrawShape() { cout << "This is a circle" << endl; }
};

-----------------------------------------------
Here's the code someone wrote:
-----------------------------------------------
#include <iostream>

using namespace std;

class Shape
{
public:
Shape() {};
virtual ~Shape() {};
virtual void DrawShape() = 0;
};

class Circle : public Shape
{
public:
Circle() {};
virtual ~Circle() {};
virtual void DrawShape() { cout << "This is a circle" << endl; }
};

class Triangle : public Shape
{
public:
Triangle() {};
virtual ~Triangle() {};
virtual void DrawShape() { cout << "This is a triangle" << endl; }
};

class Rectangle : public Shape
{
public:
Rectangle() {};
virtual ~Rectangle() {};
virtual void DrawShape() { cout << "This is a rectangle" << endl; }
};

int main()
{
Shape* pShape = 0;
cout <<"=============================================="<<endl;
cout << "Do you want to display (type 1,2,or 3):" <<endl;
cout << "1. Circle"                                             <<endl;
cout << "2. Triangle"                                   <<endl;
cout << "3. Rectangle"                                             <<endl;
cout <<"----------------------------------------------"<<endl;
cin.get();

{
case 1:
pShape = new Circle;
break;
cin.get();
case 2:
pShape = new Triangle;
break;
cin.get();
case 3:
pShape = new Rectangle;
break;
cin.get();
default:
cout << "Invalid choice.  Good-bye!" << endl;
cin.get();
return -1;

}
pShape->DrawShape();
delete pShape;
cin.get();

return 0;
}
0
meaar
• 2
1 Solution

Commented:
Hi meaar,

~<functionName>
Where functionName is same as class name signifies destructor ...

Class Shape has 3 members ... a constructor which is empty and does nothing ...
A virtual destructor .... why we need a virtual destructor
http://blogs.msdn.com/oldnewthing/archive/2004/05/07/127826.aspx
http://www.codersource.net/cpp_virtual_destructors.html

And third member is a pure virtual function DrawShape() .. Note the =0. Pure virtual function is one whose implementation is mandatory for every class that derives from Shape class ...

Class Circle derives from Shape ... again an empty constructor and a virtual destructor ...
Since it derives from Shape, it provides an implementation for DrawShape - the pure virtual function in parent class ..

Now if you have
Shape * ptr;
Circle obj1;

ptr = &obj1;
ptr->DrawShape(); //this call will print "this is a circle"

Cheers!
sunnycoder
0

Author Commented:
0

Commented:
:) ...

It reported failure on first attempt which as I discovered later was successful.

Deleted the duplicate post.

sunnycoder
Page Editor
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.