programming-examples/c++/1_Overview/CPP Program To Implement Virtual Functions.cpp
2019-11-15 12:59:38 +01:00

150 lines
2.5 KiB
C++

// Start the program
// Create the base class and declare the data member under protected access specifier and declare the function
// Create the derived class and access the base class data members in the derived class
// Create the object for derived class
// Call the public member function of the derived class
// Compile and run the program
#include <iostream.h>
#include<string.h>
#include <conio.h>
class Shape
{
double width;
double height;
char name[20];
public:
Shape()
{
width = height = 0.0;
strcpy(name, "unknown");
}
Shape(double w, double h, char *n)
{
width = w;
height = h;
strcpy(name, n);
}
Shape(double x, char *n)
{
width = height = x;
strcpy(name, n);
}
void display()
{
cout << "Width and height are " << width << " and " << height << "\n";
}
double getWidth()
{
return width;
}
double getHeight()
{
return height;
}
void setWidth(double w)
{
width = w;
}
void setHeight(double h)
{
height = h;
}
char *getName()
{
return name;
}
virtual double area() = 0;
};
class Triangle : public Shape
{
char style[20];
public:
Triangle()
{
strcpy(style, "unknown");
}
Triangle(char *str, double w, double h) : Shape(w, h, "triangle")
{
strcpy(style, str);
}
Triangle(double x) : Shape(x, "triangle")
{
strcpy(style, "isosceles");
}
double area()
{
return getWidth() * getHeight() / 2;
}
void showStyle()
{
cout << "Triangle is " << style << "\n";
}
};
class Rectangle : public Shape
{
public:
Rectangle(double w, double h) : Shape(w, h, "rectangle") { }
Rectangle(double x) : Shape(x, "rectangle") { }
bool isSquare()
{
if(getWidth() == getHeight())
return true;
return false;
}
double area()
{
return getWidth() * getHeight();
}
};
int main()
{
Shape *shapes[4];
shapes[0] = &Triangle("right", 8.0, 12.0);
shapes[1] = &Rectangle(10);
shapes[2] = &Rectangle(10, 4);
shapes[3] = &Triangle(7.0);
for(int i=0; i < 4; i++)
{
cout << "object is " << shapes[i]->getName() << "\n";
cout << "Area is " << shapes[i]->area() << "\n\n";
}
return 0;
}