|
|
|
Circle Class - Version 3
version 2: ostream& in showdata(), accessor and mutator functions,
and separate compilation.
version 3: static data member, setCircle,
area, circumference and equal functions
Definition Part
% cat circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
// Circle class definition - file circle.h
class Circle
{
public:
Circle();
// default constructor
Circle(int x, int y, double r); // constructor
void showdata(ostream& out);
double
get_radius();
// accessor
void set_radius( double r );
// mutator
void setCircle(int x,
int y, double r);
double area();
double circumference();
bool equal( Circle& c2 );
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 "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)
{
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()
{
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()
{
return PI*radius*radius;
}
// circumference
double Circle::circumference()
{
return 2.0 * PI * radius;
}
// test equality of Circle objects
bool Circle::equal( Circle& c2 )
{
bool eq;
eq = (radius==c2.radius) && (xcenter==c2.xcenter)
&& (ycenter==c2.ycenter);
return eq;
}
Driver Program
% cat circ3.cpp
// driver program for Circle class example
#include<iostream>
using namespace std;
#include<fstream>
#include "circle.h" // header file
int main()
{
int new_x, new_y;
double new_r;
// declare Circle objects a and b
Circle a(3, 4, 4.0), b;
cout << "Circle a: " << endl;
a.showdata( cout );
cout << "Circle b: " << endl;
b.showdata( cout );
// set new values for b
cout << "\n\nEnter new values for xcenter, ycenter, and radius:
";
cin >> new_x >> new_y >> new_r;
b.setCircle(new_x, new_y, new_r);
cout << "New values for Circle b: " << endl;
b.showdata( cout );
// area and circumference for b
cout << "\nArea of b = " << b.area() << endl;
cout << "Circumference of b = " << b.circumference()
<< endl;
// check equality
if ( a.equal(b) )
cout << "\nThe circle objects are equal" <<
endl;
else
cout << "\nThe circle objects are NOT equal"
<< endl;
return 0;
}
Compile and Execute
% g++ circ3.cpp circle.cpp
cswanson@mega (~/summer05/circlass3) % a.out
Circle a:
The circle is centered at (3, 4)
Radius = 4.00
Circle b:
The circle is centered at (0, 0)
Radius = 1.00
Enter new values for xcenter, ycenter, and radius: 4 4 8.0
New values for Circle b:
The circle is centered at (4, 4)
Radius = 8.00
Area of b = 201.06
Circumference of b = 50.27
The circle objects are NOT equal
Run it again!
% a.out
Circle a:
The circle is centered at (3, 4)
Radius = 4.00
Circle b:
The circle is centered at (0, 0)
Radius = 1.00
Enter new values for xcenter, ycenter, and radius: 3 4 4.0
New values for Circle b:
The circle is centered at (3, 4)
Radius = 4.00
Area of b = 50.27
Circumference of b = 25.13
The circle objects are equal
|
|