1

I know I should include a "get_Diameter()" function in the class, so as to access the private data member, but I haven't been able to figure out where the really small numbers come from.

(Can ignore the Rectangle stuff - its a circle problem)

Here is the driver code:

// classes example
#include <iostream>
using namespace std;

#include "rect2.h"
#include "roughCirc.h"

int main () {
  Rectangle rect (3,4);
  Rectangle rectb;
  cout << "rect area: " << rect.area() << endl;
  cout << "rectb area: " << rectb.area() << endl;
  cout << " " << endl;

  Circle circ (1.3);
  cout << "circle area: " << circ.area() << endl;

  Circle circB;
  cout << "circle area: " << circB.area() << endl;
  return 0;
}
/*
g++ -o main2 main2.cpp rect2.cpp roughCirc.cpp 
*/

Class: roughCirc.h

class Circle {
    double diameter;
  public:
    Circle (double);
    Circle ();
    double area (void);
};

and roughCirc.cpp

#include <iostream>
using namespace std;

#include "roughCirc.h"

Circle::Circle (double) {
    diameter = 1.1212;
}

Circle::Circle () {
    diameter = 32.42;
}

double Circle::area(void) {
    double tmp = 3.1416 * 0.25 * diameter*diameter;
    cout << "diameter is: " << diameter << " and area is: " << tmp << endl;
}

and the output;

X@X:X$ ./main2
rect area: 12
rectb area: 25

circle area: diameter is: 1.1212 and area is: 0.987318
3.03428e-86
circle area: diameter is: 32.42 and area is: 825.5
3.03428e-86

Not sure it matters, but I have latest and greatest packages from Debian stable. Command line is at bottom of driver file.

nate
  • 269
  • 2
  • 11

1 Answers1

5

Your function is declared to return a double

double Circle::area(void) {
    double tmp = 3.1416 * 0.25 * diameter*diameter;
    cout << "diameter is: " << diameter << " and area is: " << tmp << endl;
}

yet you have no return statement which returns a double. So this line

cout << "circle area: " << circB.area() << endl;

will invoke undefined behavior while outputting .area(). Instead you should return the result of your calculation

double Circle::area() {
    double tmp = 3.1416 * 0.25 * diameter*diameter;
    cout << "diameter is: " << diameter << " and area is: " << tmp << endl;
    return tmp;
}
Cory Kramer
  • 114,268
  • 16
  • 167
  • 218