In: Computer Science
C++
Make this class generic so that the sides of the shape may be integer or float.
---------------shape.h------------
class Shape
{
public:
Shape();
virtual int getSide();
virtual bool setSide(int x);
virtual int getArea();
virtual int getPerimeter();
void display();
~Shape();
protected:
private:
int side;
// T_sides[numSides];
};
----------------shape.cpp----------
#include "Shape.h"
#include <iostream>
using namespace std;
Shape::Shape()
{
}
void Shape::display()
{
cout<<"side: "<<getSide()<<endl;
cout<<" area: "<<getArea()<<endl;
cout<<"perimeter: "<<getPerimeter()<<endl;
}
bool Shape::setSide(int x)
{
if(x>0){
side = x;
return true;
}else
return false;
}
int Shape::getSide()
{
return side;
}
int Shape::getArea()
{
return side*side;
}
int Shape::getPerimeter()
{
return side*4;
}
Shape::~Shape()
{
//dtor
}
int main()
{
int num;
Shape s1;
cout<<"Enter side of shape: ";
cin>>num;
if (!s1.setSide(num))
{
cout<<"Please enter a valid side."<<endl;
}
s1.display();
return 0;
}

template <class T>
class Shape {
public:
Shape();
virtual T getSide();
virtual bool setSide(T x);
virtual T getArea();
virtual T getPerimeter();
void display();
~Shape();
protected:
private:
T side;
// T_sides[numSides];
};

#include "Shape.h"
#include <iostream>
using namespace std;
template <class T>
Shape<T>::Shape() {
}
template <class T>
void Shape<T>::display() {
cout << "side: " << getSide() << endl;
cout << " area: " << getArea() << endl;
cout << "perimeter: " << getPerimeter() << endl;
}
template <class T>
bool Shape<T>::setSide(T x) {
if (x > 0) {
side = x;
return true;
} else
return false;
}
template <class T>
T Shape<T>::getSide() {
return side;
}
template <class T>
T Shape<T>::getArea() {
return side * side;
}
template <class T>
T Shape<T>::getPerimeter() {
return side * 4;
}
template <class T>
Shape<T>::~Shape() {
//dtor
}
int main() {
int num;
Shape<int> s1;
cout << "Enter side of shape(int): ";
cin >> num;
if (!s1.setSide(num)) {
cout << "Please enter a valid side." << endl;
}
s1.display();
return 0;
}