什么是真正的小数字?C++类

nat*_*ate 1 c++ class

我知道我应该在类中包含一个"get_Diameter()"函数,以便访问私有数据成员,但我无法弄清楚真正的小数字来自何处.

(可以忽略Rectangle的东西 - 它是一个圆形问题)

这是驱动程序代码:

// 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 
*/
Run Code Online (Sandbox Code Playgroud)

分类:roughCirc.h

class Circle {
    double diameter;
  public:
    Circle (double);
    Circle ();
    double area (void);
};
Run Code Online (Sandbox Code Playgroud)

和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;
}
Run Code Online (Sandbox Code Playgroud)

和输出;

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
Run Code Online (Sandbox Code Playgroud)

不确定它是否重要,但我有来自Debian stable的最新最好的软件包.命令行位于驱动程序文件的底部.

Cor*_*mer 5

您的函数被声明为返回a double

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

但是你没有return返回双精度的陈述.所以这一行

cout << "circle area: " << circB.area() << endl;
Run Code Online (Sandbox Code Playgroud)

将在输出时调用未定义的行为.area().相反,您应该返回计算结果

double Circle::area() {
    double tmp = 3.1416 * 0.25 * diameter*diameter;
    cout << "diameter is: " << diameter << " and area is: " << tmp << endl;
    return tmp;
}
Run Code Online (Sandbox Code Playgroud)