Gold University of Minnesota M. Skip to main content.University of Minnesota. Home page.
 
 
 

What's inside.

Ta Email

Download Compiler

Final Project

Lab Notes

Office Hours

Schedule

Syllabus

Announcements

Check Grades

 

CSci 1113 Home

 
 

Printer-friendly version

 
Circle Class - Version 4

version 2:  ostream& in showdata(), accessor and mutator functions, and separate compilation.
version 3:  static data member, setCircle, area, circumference and equal functions
version 4: const, friend functions

Definition Part

% cat circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
// Circle class definition - file circle.h

class Circle
{
   friend double distance( Circle& c); // friend function

   public:
     Circle();               // default constructor
     Circle(int x, int y, double r); // constructor
     void showdata(ostream& out)const;
     double get_radius()
const;       // accessor
     void set_radius( double r );    // mutator
 
     void setCircle(int x, int y, double r);
     double area()
const;
     double circumference()
const;
     bool equal( Circle& c2 )
const;

   private:
     int xcenter;
     int ycenter;
     double radius;
     static double PI; // static data member
};
#endif // CIRCLE_H


Implementation Part

% cat circle.cpp
#include <iostream>
#include <iomanip>
using namespace std;
#include <cmath>

#include "circle.h" // header file

double Circle::PI = 3.14159; // static data member

// default constructor
Circle::Circle(): xcenter(0), ycenter(0), radius(1.0)          
{
  // empty body when initialization
  // section is used
}

// constructer with parameters for initialization
Circle::Circle(int x, int y, double r): xcenter(x),
               ycenter(y),radius(r)
{
  // empty body when initialization
  // section is used
}

void Circle::showdata( ostream& out ) 
const
{
  out << setiosflags(ios::fixed | ios::showpoint ) << setprecision(2);

  out << "The circle is centered at (" << xcenter << ", "
      <<  ycenter << ")" << endl;

  out << "Radius = " << radius << endl;
   
  return;
}

// accessor function
double Circle::get_radius() 
const
{
   return radius;
}

// mutator function
void Circle::set_radius(double r)
{
  if( r < 0.0 )
  {
    cout << "The radius cannot be less than zero." << endl;
    exit(1);
  }

  else

    radius = r;
}

// setCircle() mutator function
void Circle::setCircle(int x, int y, double r)
{
   xcenter = x;
   ycenter = y;
   radius  = r;
}

// area
double Circle::area() 
const
{
   return PI*radius*radius;
}

// circumference
double Circle::circumference() 
const
{
    return 2.0 * PI * radius;
}

// test equality of Circle objects
bool Circle::equal( Circle& c2 ) 
const
{
   bool eq;

   eq = (radius==c2.radius) && (xcenter==c2.xcenter)
        && (ycenter==c2.ycenter);

   return eq;
}

// non-member friend function
double distance( Circle& c)
{
   double dist;
   dist = c.xcenter*c.xcenter + c.ycenter*c.ycenter;

   return sqrt( dist );
}


Driver Program


% cat circ4.cpp
 // driver program for Circle class example

#include<iostream>
using namespace std;
#include<fstream>

#include "circle.h" // header file

int main()
{
   double dist_to_origin;
 
   // declare Circle object a

   Circle a(3, 4, 4.0);
 
   cout << "Circle a: " << endl;
   a.showdata( cout );
  
   // get distance to origin using a friend function

   dist_to_origin = distance( a );
 
   cout << "Distance to origin = " << dist_to_origin
        << endl;
 
   // const Circle object

   cout << "\n\nconst Circle object " << endl;
   const Circle b(2, 3, 9.99);
   b.showdata( cout );
   // b.set_radius( 13.3 );

   return 0;
}


Compile and Execute

% g++ circ4.cpp circle.cpp
% a.out
Circle a:
The circle is centered at (3, 4)
Radius = 4.00
Distance to origin = 5.00


const Circle object
The circle is centered at (2, 3)
Radius = 9.99


 
The University of Minnesota is an equal opportunity educator and employer.
CSci 1113: C++ Programming