Originally Posted by
medievalelks
Here's an abbreviated version with the same main:
Code:
#include <string>
using namespace std;
class Shape {
public:
virtual string toString() const = 0;
};
class Circle : public Shape {
public:
virtual string toString() const { return "Circle"; }
};
Shape * getShape()
{
Shape * circle = new Circle;
return circle;
}
int main();
{
Shape getShape();
Shape::toString();
}
When I try to compile with g++, I get this:
shape.cpp:23: error: expected unqualified-id before '{' token
When I remove the ';' after main, I get this:
shape.cpp: In function `int main()':
shape.cpp:24: error: invalid return type for function `Shape getShape()'
shape.cpp:24: error: because the following virtual functions are abstract:
shape.cpp:7: error: virtual std::string Shape::toString() const
shape.cpp:25: error: cannot call member function `virtual std::string Shape::toString() const' without object
Am I missing something?
Yes the getShape() function is used to get the dimension the shape. The myShape[6] is a fixed size array which is suppose to contain the information for all the 6 shapes that will be created.
The main function is suppose to call the getShape() function and the toString function that will print the information that the getShapte() gets. The toString function is supposed to be called in the main function. Here is the code i made
getShape.cpp
Code:
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "circle.h"
#include "rectangle.h"
#include "square.h"
Shape* getShape()
{
int i;
string shapetype;
char choice;
string color;
double width;
double length;
double radius;
Shape* myShape[6];
cout << "Creating a Shape ";
cout << "============================================== "<<endl;
cout << " 1: Create a circle "<<endl;
cout << " 2: Create a rectangle "<<endl;
cout << " 3: Create a square "<<endl;
cout << " 4: Done "<<endl;
cout << "============================================== "<<endl;
for ( i = 0; i < 6; ++i){
cout << "Enter number for shapetype" <<endl;
cin >> choice;
switch(choice){
case '1':
cout << "\nEnter the shape's color (or 'done')...";
cin >> color ;
cout << "\nEnter shape type..." ;
cin >> shapetype;
cout << "\nEnter radius.... ";
cin >> radius;
myShape[i] = new circle(color, radius);
break;
case '2':
cout << "\nEnter the shape's color (or 'done')...";
cin >> color;
cout << "\nEnter shape type...";
cin >> shapetype;
cout << "\nEnter the length and width.... ";
cin >> width >> length;
myShape[i] = new rectangle(color, length, width);
break;
case '3':
cout << "\nEnter the shape's color (or 'done')...";
cin >> color;
cout <<"\nEnter shape type...";
cin >> shapetype;
cout << "\nEnter the length of a side...";
cin >> length;
myShape[i] = new square(color, length);
break;
case '4':
cout <<"\nEnter the shape's color (or 'done')....";
cout << "done"<< endl;}
}
return myShape[6];
}
Shape.h and Shape.cpp
Code:
#ifndef SHAPE_H
#define SHAPE_H
#include <string.h>
using std::string;
using namespace std;
class Shape
{
public:
Shape(const string &color); //constructor
~Shape();
string getColor()const; //returns objects color value
virtual double area()const = 0;// a const pure virtual member function that computes and returns the object's area
virtual string toString() const = 0; //a const pure virtual member function that returns the shape's description
private:
string s_color;
};
#endif //SHAPE_H
=========================================
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "Shape.h"
Shape::Shape(const string &color)
:s_color(color)
{}
string Shape::getColor()const
{
return s_color;
}
Circle.h and Circle.cpp
Code:
#ifndef CIRCLE_H
#define CIRCLE_H
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "shape.h" //shape class definition
class circle : public Shape
{
public:
circle (const string &color, double);//constructor
~circle();//dtor
double getRadius();
virtual double area()const;//calculate area
virtual string toString()const;
private:
double rad; //radius of circle
};
#endif //CIRCLE_H
=============================
#include <string>
using std::string;
#include <sstream>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "circle.h"
//ctor
circle::circle(const string& color, double radius)
:Shape(color)
{
radius = rad;
}//end ctor
double circle::getRadius()
{
return rad;
}
//function to calculate circle area
double circle::area()const
{
return rad * rad * 3.14;
}//end function to get circle area
//returns circle description
string circle::toString()const
{
ostringstream os;
os << getColor() <<" circle with radius of " << rad << " and area of " << area();
return os.str();
}//end function to return circle description
square.h and square.cpp
Code:
#ifndef SQUARE_H
#define SQUARE_H
#include "shape.h"
class square : public Shape
{
public:
square(const string &color, double length); //constructor
~square();//destructor
double getLength();
virtual double area()const;//calculate area
virtual string toString()const;
private:
double len; //length of square
};
#endif //SQUARE_H
===============================
#include <string>
using std::string;
#include <sstream>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "square.h"
//ctor
square::square(const string &color, double length)
:Shape(color)
{
length = len;
}//end ctor
//dtor
double square::getLength()
{
return len;
}
//Function to calculate are
double square::area()const
{
return len * len;
}//end function to calculate area
//Function to returns square's description
string square::toString()const
{
ostringstream os;
os << getColor() <<"square with side length of " << len << " " << "and area of " << area();
return os.str();
}//end of function to return's square description
rectangle.h and rectangle.cpp
Code:
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "shape.h"
class rectangle : public Shape
{
public:
rectangle(const string &color, double width, double length);//constructor
~rectangle();//dtor
double getLength();
double getWidth();
virtual double area()const; //calculate area
virtual string toString()const;
private:
double len; //length of rectangle
double wid; //width of rectangle
};
#endif //RECTANGLE_H
========================
#include <string>
using std::string;
#include <sstream>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "rectangle.h"
//ctor
rectangle::rectangle(const string &color, double width, double length)
:Shape(color)
{
len = length;
wid = width;
}//end ctor
//dtor
double rectangle::getWidth()
{
return wid;
}
double rectangle::getLength()
{
return len;
}
//function to calculate rectangle area
double rectangle::area() const
{
return len * wid;
}//end function to get rectangle area
//returns rectangle's description
string rectangle::toString()const
{
ostringstream os;
os << getColor() <<"rectangle with length of " << len << " and width of " << wid << " and area of " << area();
return os.str();
}//end function to return rectangle's description