|
|
|
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
|
|