CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 14 of 14
  1. #1
    Join Date
    Mar 2011
    Posts
    15

    Circle and Radius Problem

    Hey,
    I am working on a problem in which I am having a hard time starting. The problem being:

    Every circle has a center and a radius. Given the radius, we can determine its position in the x-y plane. The center of the circle is a point in the x-y plane. Design a class, circleType, that can store the radius and center of the circle. Because the center is a point in the x-y plane and you designed the class to caputure the propteries of a point in programming exercise 3, you must derive the class circleType from the class pointType. You should be able to perform the usual operations on the circle, such as setting the radius, printing the radius, calculating and print the area and circumference, and carrying out the usual operations on the center. Also write a program to test various operations on a circle.

    Although is references a previous exercise, we do not do this one, but class pointType should be designed to store and process a point in the x-y plane, perform operations on the point such as setting the coordinates of the point, printing the coordinates of the point, returning x coordinate and returning the y coordinate.

    Sorry, I know this is a mouthful but I have difficulty in this language.

    I have started the code, but OOP in C++ is still very new to me and classes are still very confusing. But here's what I have to far:

    circleType.h
    Code:
    #include "pointType.h"
    
    class circleType: public pointType
    {
          
    };
    circleTypeImp.cpp
    Code:
    #include <iostream>
    #include "pointType.h"
    pointType.h
    Code:
    using namespace std;
    
    class pointType
    {
    public:
           void printPoint() const;
           void setPoint();
           void getPoint();
           
           pointType();
           pointType(double x, double y);
           ~pointType();
    private:
            double xPlane, yPlane;
    };
    pointTypeImp.cpp
    Code:
    #include <iostream>
    #include "pointType.h"
    
    pointType::pointType()
    {
         
    }
    
    pointType::pointType(double x, double y)
    {
         xPlane = x;
         yPlane = y;
    }
    
    pointType::~pointType()
    {
         
    }
    
    void pointType::printPoint() const
    {
         
    }
    
    void pointType::setPoint()
    {
    
    }
    
    void pointType::getPoint()
    {
         
    }
    main.cpp
    Code:
    #include <iostream>
    #include "pointType.h"
    //#include "circleType.h"
    
    using namespace std;
    
    int main()
    {
        
        system("pause");
        return 0;
    }

    I don't want this done for me, I just need a little push to understand what I might need. I am confusing on the member functions and variables of the classes and what exactly I will need and what they should do. I never got the concept of getter and setter functions either and why I need to use them. If anyone can offer a little guidance to make things a little more clear, I would appreciate it. I know this is very incomplete, I am having a coding block and it's frustrating!

  2. #2
    Join Date
    Jun 2009
    Location
    oklahoma
    Posts
    199

    Re: Circle and Radius Problem

    First order of business, get your pointType functions correct.
    What do you expect setPoint and getPoint to do?
    You currently have them both defined as accepting nothing and returning nothing.

    Start on those two functions and the printPoint function.

    Then, make sure those same functions work as expected when derived in the circleType class.

  3. #3
    Join Date
    Jul 2005
    Location
    Netherlands
    Posts
    2,042

    Re: Circle and Radius Problem

    Quote Originally Posted by xCrusade View Post
    Every circle has a center and a radius. Given the radius, we can determine its position in the x-y plane. The center of the circle is a point in the x-y plane. Design a class, circleType, that can store the radius and center of the circle. Because the center is a point in the x-y plane and you designed the class to caputure the propteries of a point in programming exercise 3, you must derive the class circleType from the class pointType. You should be able to perform the usual operations on the circle, such as setting the radius, printing the radius, calculating and print the area and circumference, and carrying out the usual operations on the center. Also write a program to test various operations on a circle.
    IMO, this is a horrible exercise. In OOP, public inheritance means an IS-A relationship. That is, if Circle is publicly derived from Point then Circle is a Point. That's not true, therefore the class design is wrong. This is the kind of this you use to filter out unqualified applicants in a job interview.

    Here's some further reading on the basic principles of OOP:
    http://www.objectmentor.com/resources/articles/ocp.pdf
    http://www.objectmentor.com/resources/articles/lsp.pdf
    http://www.objectmentor.com/resources/articles/dip.pdf
    Cheers, D Drmmr

    Please put [code][/code] tags around your code to preserve indentation and make it more readable.

    As long as man ascribes to himself what is merely a posibility, he will not work for the attainment of it. - P. D. Ouspensky

  4. #4
    Join Date
    Jan 2006
    Location
    Singapore
    Posts
    6,765

    Re: Circle and Radius Problem

    Quote Originally Posted by xCrusade
    Although is references a previous exercise, we do not do this one, but class pointType should be designed to store and process a point in the x-y plane, perform operations on the point such as setting the coordinates of the point, printing the coordinates of the point, returning x coordinate and returning the y coordinate.
    Quote Originally Posted by xCrusade
    I am confusing on the member functions and variables of the classes and what exactly I will need and what they should do. I never got the concept of getter and setter functions either and why I need to use them.
    It looks like you have two constructors which look about right. You don't need the destructor since the compiler generated one will do. Instead of getPoint and setPoint, have getX, getY, setX, setY member functions. The former two should return a value and the latter two should have a parameter. With these, you can overload operator<< to output a pointType object, or if you have not been taught this, then just write a non-member print function that uses getX and getY.

    D_Drmmr is right: if you dare to do what is right, have a pointType member variable in your circleType class. You then provide getPoint and setPoint member functions in circleType. Of course, be prepared to defend your deviation from the instructions with clear reasoning and proper citation of sources that discuss OOP.
    C + C++ Compiler: MinGW port of GCC
    Build + Version Control System: SCons + Bazaar

    Look up a C/C++ Reference and learn How To Ask Questions The Smart Way
    Kindly rate my posts if you found them useful

  5. #5
    Join Date
    Mar 2011
    Posts
    15

    Re: Circle and Radius Problem

    Thanks for the input guys. I am going to be working on it most the day after I get out of work, I will post my results tonight if there are no problems.

  6. #6
    Lindley is offline Elite Member Power Poster
    Join Date
    Oct 2007
    Location
    Seattle, WA
    Posts
    10,895

    Re: Circle and Radius Problem

    Quote Originally Posted by D_Drmmr View Post
    IMO, this is a horrible exercise. In OOP, public inheritance means an IS-A relationship. That is, if Circle is publicly derived from Point then Circle is a Point. That's not true, therefore the class design is wrong.
    Note the word "publicly". It's perfectly fine to derive Circle privately from Point, although personally I would use composition instead.

  7. #7
    Join Date
    Mar 2011
    Posts
    15

    Re: Circle and Radius Problem

    Here is what I have so far.. I am having trouble starting the circleType class, I am not sure what functions to put in it. I am assuming setRadius, printRadius, calculateArea, printArea, calculateCircumference, printCircumference, or combine the print functions into one. Also, I cannot get the main file to read an object from the circleType class, only the pointType. Can anyone point me in the right direction? Here is my program so far..

    circleType.h
    Code:
    class circleType: public pointType
    {
          public:
                 circleType();
                 circleType(double);
                 ~circleType();
                 
          private:
                  double radius;
    };//End derived class circleType
    main.cpp
    Code:
    #include <iostream>
    //#include "pointType.h"
    #include "circleType.h"
    
    using namespace std;
    
    int main()
    {
        pointType c;
        //classType c;
        
        double x;
        double y;
        
        cout << "Enter the coordinate of x: ";
        cin >> x;
        cout << endl;
        
        cout << "Enter the coordinate of y: ";
        cin >> y;
        cout << endl;
        
        c.setXPoint(x);
        c.setYPoint(y);
        
        c.getXPoint(x);
        c.getYPoint(y);
        
        c.printPoint();
        
        system("pause");
        return 0;
    }//End main
    circleTypeImp.cpp
    Code:
    #include <iostream>
    #include "circleType.h"
    
    circleType::circleType()
    {
                            
    }//End circleType
    
    circleType::circleType(double)
    {
         double radius;                                                       
    }//End circleType(double)
    
    circleType::~circleType()
    {
                             
    }//End ~circleType()
    pointType.h
    Code:
    class pointType
    {
    public:
           void printPoint() const;
           void setXPoint(double);
           void setYPoint(double);
           double getXPoint(double);
           double getYPoint(double);
           
           pointType();
           pointType(double x, double y);
           ~pointType();
    private:
            double xPoint;
            double yPoint;
    };//End base class pointType
    pointTypeImp.cpp
    Code:
    #include <iostream>
    #include "pointType.h"
    
    pointType::pointType()
    {
         
    }//End pointType
    
    pointType::pointType(double x, double y)
    {
         double xPoint;
         double yPoint;
    }//End pointType(double, double)
    
    pointType::~pointType()
    {
         
    }//End ~pointType
    
    void pointType::printPoint() const
    {
        cout << "The point is at (" << xPoint << "," << yPoint << ")" << endl;
        cout << endl;
    }//End printPoint
    
    void pointType::setXPoint(double x)
    {
         xPoint = x;
    }//End
    
    void pointType::setYPoint(double y)
    {
         yPoint = y;
    }
    
    double pointType::getXPoint(double x)
    {
         return x;
    }
    
    double pointType::getYPoint(double y)
    {
         return y;
    }
    How would I get the main.cpp be able to read the circleType.h file with the pointType classes functions? or how do I implement circleType into my program to complete it? I think I can manage the calculations and the printing if I can get it to work so I can test. Also, am I right on the functions that I might need to complete the program?

  8. #8
    Join Date
    Jun 2009
    Location
    oklahoma
    Posts
    199

    Re: Circle and Radius Problem

    You currently have xPoint and yPoint set to private inside pointType. They need to be 'protected' so that circleType can inherit it.

  9. #9
    Join Date
    Mar 2011
    Posts
    15

    Re: Circle and Radius Problem

    I've been working on this most of the day and it has been going smoothly, I am just having one problem. As of now, I have the user entering 2 points for x and y coordinates. Which seems pretty much useless, because I assume these points are to somehow calculate the radius of the circle. Right now, I have the user inputting the radius of their own circle just so I can get some results. Everything seems to work as is, but my question is how do I implement a calculation into my code that takes the x and y coordinate entered by the user and creates a radius from it?

    Here is what I have so far:

    circleType.h
    Code:
    class circleType: public pointType
    {
    public:
           void printCircle() const;      
           void setRadius(double);
           double getRadius(double);
           double calcArea(double);
           double calcCircumference(double);
                 
           circleType();
           circleType(double radius);
           ~circleType();
                 
    private:
           double circleRadius;
           double circleArea;
           double circleCircumference;
    };//End derived class circleType
    circleTypeImp.cpp
    Code:
    #include <iostream>
    #include <cmath>
    #include "pointType.h"
    #include "circleType.h"
    
    using namespace std;
    
    circleType::circleType()
    {
                            
    }//End circleType
    
    circleType::circleType(double)
    {
         double circleRadius;                                                       
    }//End circleType(double)
    
    circleType::~circleType()
    {
                             
    }//End ~circleType()
    
    void circleType::setRadius(double radius)
    {
         circleRadius = radius;
    }//End setRadius
    
    double circleType::getRadius(double radius)
    {
         return radius;
    }//End getRadius
    
    double circleType::calcArea(double area)
    {
         const double PI = 4.0*atan(1.0);
         
         area = PI * (circleRadius * circleRadius);
         
         circleArea = area;
         return circleArea;
    }//End calcArea
    
    double circleType::calcCircumference(double circumference)
    {
         circumference = 0;
         const double PI = 4.0*atan(1.0);
           
         circumference = PI * (2 * circleRadius);
         
         circleCircumference = circumference;
         return circleCircumference;
    }//End calcCircumference
    
    void circleType::printCircle() const
    {
         cout << "The radius of the circle is: " << circleRadius << endl;
         cout << "The area of the circle is: " << circleArea << endl;
         cout << "The circumference of the circle is: " << circleCircumference << endl;
         cout << endl;
    }//End printCircle
    main.cpp
    Code:
    #include <iostream>
    #include "pointType.h"
    #include "circleType.h"
    
    
    using namespace std;
    
    int main()
    {
        pointType p;
        circleType c;
        
        double x;
        double y;
        double radius;
        double area;
        double circumference;
        
        cout << "Follow the instructions to determine the values of your circle!" << endl;
        cout << endl;
        cout << "Enter the point for x: ";
        cin >> x; 
        cout << "Enter the point for y: ";
        cin >> y;
        cout << endl;
        
        p.setXPoint(x);
        p.setYPoint(y);
        
        p.getXPoint(x);
        p.getYPoint(y);
        
        p.printPoint();
        
        cout << "Enter the radius for your circle: ";
        cin >> radius;
        cout << endl;
        
        c.setRadius(radius);
        c.getRadius(radius);
        c.calcArea(area);
        c.calcCircumference(circumference);
        c.printCircle();
        
        system("pause");
        return 0;
    }//End main
    pointType.h
    Code:
    class pointType
    {
    public:
           void printPoint() const;
           void setXPoint(double);
           void setYPoint(double);
           double getXPoint(double);
           double getYPoint(double);
           
           pointType();
           pointType(double x, double y);
           ~pointType();
    protected:
            double xPoint;
            double yPoint;
    };//End base class pointType
    pointTypeImp.cpp
    Code:
    #include <iostream>
    #include "pointType.h"
    
    using namespace std;
    
    pointType::pointType()
    {
         
    }//End pointType
    
    pointType::pointType(double x, double y)
    {
         double xPoint;
         double yPoint;
    }//End pointType(double, double)
    
    pointType::~pointType()
    {
         
    }//End ~pointType
    
    void pointType::printPoint() const
    {
        cout << "The center point is at (" << xPoint << "," << yPoint << ")" << endl;
        cout << endl;
    }//End printPoint
    
    void pointType::setXPoint(double x)
    {
         xPoint = x;
    }//End setXPoint
    
    void pointType::setYPoint(double y)
    {
         yPoint = y;
    }//End setYPoint
    
    double pointType::getXPoint(double x)
    {
         return x;
    }//End getXPoint
    
    double pointType::getYPoint(double y)
    {
         return y;
    }//End getYPoint

    If anyone can offer any guidance, that would be much appreciated, but as it stands with the radius given by the user, it works, I just want to find a way to turn the coordinates given by the user into a radius if possible!

    Thanks for all your help!

  10. #10
    Join Date
    Oct 2006
    Location
    Sweden
    Posts
    3,654

    Re: Circle and Radius Problem

    If you want to calculate the radius you need to have the user to input two points (i.e. two x-y pairs). One that's the center of the circle and one that's a point somewhere on the circle.

    Having those points you can easily calculate the radius using Pythagoras' theorem http://en.wikipedia.org/wiki/Pythagorean_theorem
    Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible, you are, by
    definition, not smart enough to debug it.
    - Brian W. Kernighan

    To enhance your chance's of getting an answer be sure to read
    http://www.codeguru.com/forum/announ...nouncementid=6
    and http://www.codeguru.com/forum/showthread.php?t=366302 before posting

    Refresh your memory on formatting tags here
    http://www.codeguru.com/forum/misc.php?do=bbcode

    Get your free MS compiler here
    https://visualstudio.microsoft.com/vs

  11. #11
    GCDEF is offline Elite Member Power Poster
    Join Date
    Nov 2003
    Location
    Florida
    Posts
    12,635

    Re: Circle and Radius Problem

    I'm just going to echo what others have said. That is a horrible and completely inappropriate use of inheritance. Your instructor is leading you seriously astray.

  12. #12
    Join Date
    Mar 2011
    Posts
    15

    Re: Circle and Radius Problem

    Thanks for the input S_M_A, I am going to finish up when I get out of work.

    I keep hearing this is a bad use of inheritance, most likely the book. The examples and explanations in the book are somewhat vague most of the time as well, just tryin' to push through with what I got :P

  13. #13
    GCDEF is offline Elite Member Power Poster
    Join Date
    Nov 2003
    Location
    Florida
    Posts
    12,635

    Re: Circle and Radius Problem

    Quote Originally Posted by xCrusade View Post
    Thanks for the input S_M_A, I am going to finish up when I get out of work.

    I keep hearing this is a bad use of inheritance, most likely the book. The examples and explanations in the book are somewhat vague most of the time as well, just tryin' to push through with what I got :P
    If it's a book, get a new book. Seriously.

  14. #14
    Lindley is offline Elite Member Power Poster
    Join Date
    Oct 2007
    Location
    Seattle, WA
    Posts
    10,895

    Re: Circle and Radius Problem

    Proper use of inheritance is relatively simple: if you can logically say that Type1 IS-A Type2, eg "Ford IS-A Car", then it makes sense to use public inheritance, deriving Ford from Car. (Deriving Ford from AlienFromASmallPlanetInTheVicinityOfBetelgeuse would also work.)

    If you can't make the IS-A relation, then you need to consider carefully whether inheritance is appropriate. It may be that private inheritance is still just fine----which might well be the case here----but not public inheritance. The distinction between private inheritance and composition is largely a matter of interface policy.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured