Polymorphism technique Shape Classes

Dependencies:   mbed C12832

Committer:
ciaranom
Date:
Sat Dec 05 15:48:33 2020 +0000
Revision:
1:911e25976e68
Parent:
0:5c1338f5f742
Oops! (object oriented programming) classes, polymorphism.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ciaranom 0:5c1338f5f742 1 #include "mbed.h"
ciaranom 0:5c1338f5f742 2 //#include "C12832.h"
ciaranom 0:5c1338f5f742 3 #include <iostream>
ciaranom 0:5c1338f5f742 4 #include <math.h>
ciaranom 0:5c1338f5f742 5
ciaranom 0:5c1338f5f742 6 class Shape //Creating class called Shape
ciaranom 0:5c1338f5f742 7 {
ciaranom 0:5c1338f5f742 8 protected:
ciaranom 1:911e25976e68 9 float width, height, radius; //Creating protcted variables within class Shape
ciaranom 0:5c1338f5f742 10
ciaranom 0:5c1338f5f742 11
ciaranom 0:5c1338f5f742 12 public:
ciaranom 1:911e25976e68 13 Shape (float a=0, float b=0, float c=0, float d=0) //assigning values to protected variables in public domain
ciaranom 0:5c1338f5f742 14 {
ciaranom 0:5c1338f5f742 15 width = a;
ciaranom 0:5c1338f5f742 16 height = b;
ciaranom 0:5c1338f5f742 17 radius = c;
ciaranom 0:5c1338f5f742 18
ciaranom 0:5c1338f5f742 19 }
ciaranom 0:5c1338f5f742 20
ciaranom 0:5c1338f5f742 21 virtual int area () // "virtual int.." used as "int.." was setting the variable here and therefore retuning shape areas = 0. The virtual prefix (function?) essential says that int area will be used by another class
ciaranom 0:5c1338f5f742 22 {
ciaranom 0:5c1338f5f742 23 return 0;
ciaranom 0:5c1338f5f742 24 }
ciaranom 0:5c1338f5f742 25 virtual int perimeter () //Virtual funtions perimeter
ciaranom 0:5c1338f5f742 26 {
ciaranom 0:5c1338f5f742 27 return 0;
ciaranom 0:5c1338f5f742 28 }
ciaranom 0:5c1338f5f742 29 };
ciaranom 0:5c1338f5f742 30
ciaranom 0:5c1338f5f742 31 class Rectangle: public Shape //Creating class rectangle within the class of shape
ciaranom 0:5c1338f5f742 32 {
ciaranom 0:5c1338f5f742 33 public:
ciaranom 1:911e25976e68 34 Rectangle (float a=0, float b=0):Shape(a,b,0) {}
ciaranom 0:5c1338f5f742 35 int area ()
ciaranom 0:5c1338f5f742 36 {
ciaranom 0:5c1338f5f742 37 return (width*height); //Calculation for rectangle area
ciaranom 0:5c1338f5f742 38 }
ciaranom 0:5c1338f5f742 39 int perimeter ()
ciaranom 0:5c1338f5f742 40 {
ciaranom 0:5c1338f5f742 41 return ((width+height)*2); //Calculation for rectangle perimeter
ciaranom 0:5c1338f5f742 42 }
ciaranom 0:5c1338f5f742 43 };
ciaranom 0:5c1338f5f742 44
ciaranom 0:5c1338f5f742 45 class Triangle: public Shape //Creating class triangle within the class of shape
ciaranom 0:5c1338f5f742 46 {
ciaranom 0:5c1338f5f742 47 public:
ciaranom 1:911e25976e68 48 Triangle(float a=0, float b=0): Shape (a,b,0) {}
ciaranom 0:5c1338f5f742 49 int area ()
ciaranom 0:5c1338f5f742 50 {
ciaranom 0:5c1338f5f742 51 return (width*height/2); //Calculation for Triangle area
ciaranom 0:5c1338f5f742 52 }
ciaranom 1:911e25976e68 53 int perimeter ()
ciaranom 1:911e25976e68 54 {
ciaranom 1:911e25976e68 55 return width+(2*(sqrt((width/2)*(width/2)+(height*height)))); //Calculation for Triangle perimeter
ciaranom 1:911e25976e68 56 // 2 * 2 + 6 * 6
ciaranom 1:911e25976e68 57 }
ciaranom 0:5c1338f5f742 58 };
ciaranom 0:5c1338f5f742 59
ciaranom 0:5c1338f5f742 60 class Circle: public Shape //Creating class circle within the class of shape
ciaranom 0:5c1338f5f742 61 {
ciaranom 0:5c1338f5f742 62 public:
ciaranom 1:911e25976e68 63 Circle (float c=0): Shape (0,0,c) {} // c is the third calue in the constructor
ciaranom 0:5c1338f5f742 64 int area ()
ciaranom 0:5c1338f5f742 65 {
ciaranom 0:5c1338f5f742 66 return ((radius)*2*3.14); //Calculation for circle area
ciaranom 0:5c1338f5f742 67 }
ciaranom 0:5c1338f5f742 68 int perimeter ()
ciaranom 0:5c1338f5f742 69 {
ciaranom 0:5c1338f5f742 70 return (3.14*radius*radius); //Calculation for rectangle perimeter
ciaranom 0:5c1338f5f742 71 }
ciaranom 0:5c1338f5f742 72 };
ciaranom 0:5c1338f5f742 73
ciaranom 0:5c1338f5f742 74 // Main function
ciaranom 0:5c1338f5f742 75 int main ()
ciaranom 0:5c1338f5f742 76 {
ciaranom 0:5c1338f5f742 77 Shape *Vshape; //Vshape is the pointer towards Shape. shape is how we will draw from the class shape
ciaranom 0:5c1338f5f742 78 Rectangle rec(3,4); //Assign x and y values for Rectangle
ciaranom 1:911e25976e68 79 Triangle tri(8,3); //Assign x and y values for Triangle
ciaranom 0:5c1338f5f742 80 Circle cir(5); //Assign radius values for Circle
ciaranom 0:5c1338f5f742 81
ciaranom 0:5c1338f5f742 82
ciaranom 0:5c1338f5f742 83 //Store address if rectangle
ciaranom 0:5c1338f5f742 84 Vshape = &rec;
ciaranom 0:5c1338f5f742 85
ciaranom 0:5c1338f5f742 86 //Call rectangle and print area
ciaranom 0:5c1338f5f742 87 Vshape->area(); //Calling Cshapes area function
ciaranom 1:911e25976e68 88 float Rval = Vshape->area(); //Assigning return value to Rval
ciaranom 1:911e25976e68 89 printf("Rectangle area is: %.1f\n\r",Rval); //print value
ciaranom 0:5c1338f5f742 90 Vshape->perimeter();
ciaranom 1:911e25976e68 91 float RvalP = Vshape->perimeter();
ciaranom 1:911e25976e68 92 printf("Rectangle perimeter is: %.1f\n\n\r",RvalP);
ciaranom 0:5c1338f5f742 93
ciaranom 0:5c1338f5f742 94
ciaranom 0:5c1338f5f742 95 //Store address if triangle
ciaranom 0:5c1338f5f742 96 Vshape = &tri;
ciaranom 0:5c1338f5f742 97
ciaranom 0:5c1338f5f742 98 //Call triangle and print area
ciaranom 0:5c1338f5f742 99 Vshape->area();
ciaranom 1:911e25976e68 100 float Tval = Vshape->area();
ciaranom 1:911e25976e68 101 printf("Triangle area is: %.1f\n\r",Tval);
ciaranom 1:911e25976e68 102 Vshape->perimeter();
ciaranom 1:911e25976e68 103 float TvalP = Vshape->perimeter();
ciaranom 1:911e25976e68 104 printf("Triangle perimeter is: %.1f\n\n\r",TvalP);
ciaranom 0:5c1338f5f742 105
ciaranom 0:5c1338f5f742 106
ciaranom 0:5c1338f5f742 107 //Store address if Circle
ciaranom 0:5c1338f5f742 108 Vshape = &cir;
ciaranom 0:5c1338f5f742 109
ciaranom 0:5c1338f5f742 110
ciaranom 0:5c1338f5f742 111 //Call Circle area
ciaranom 0:5c1338f5f742 112 Vshape->area();
ciaranom 1:911e25976e68 113 float Cval = Vshape->area();
ciaranom 1:911e25976e68 114 printf("Circle area is: %.1f\n\r",Cval);
ciaranom 0:5c1338f5f742 115 Vshape->perimeter();
ciaranom 1:911e25976e68 116 float CvalP = Vshape->perimeter();
ciaranom 1:911e25976e68 117 printf("Circle perimeter is: %.1f\n\n\n\n\r",CvalP);
ciaranom 0:5c1338f5f742 118
ciaranom 0:5c1338f5f742 119 return 0;
ciaranom 0:5c1338f5f742 120
ciaranom 0:5c1338f5f742 121 }