为什么这段代码没有输出所需的输出?

Why isn't this code outputting the desired output?

本文关键字:输出 段代码 代码 为什么      更新时间:2023-10-16

它总是为区域输出"0"。我不知道如何在int r中计算面积。

// Define a class and use it to test out some math stuff
#include <iostream>
#include <cmath>
using namespace std;
class Circle {
        public:
                // function that calculates the area of a circle
                float circle_area(int r) {
                        area = 3.14 * (r*r);
                        return area;
                } // end function circle_area
                void display_msg() {
                        cout << "Area: " << circle_area(r) << endl;
                } // end function display_msg
        private:
                float area;
                int r;
}; // end class Circle
int main(void) {
        int r;
        Circle circle_calc; // create a Circle object named circle_calc
        cout << "Radius of circle: ";
        cin >> r;
        circle_calc.display_msg();
}

成员变量Circle::r从未设置,main()中的局部变量r通过cin设置,但从未使用。

像这样的东西可能是你想要的:

class Circle {
public:
    Circle(int a_radius) : r(a_radius) {}
    // function that calculates the area of a circle
    float circle_area(int r) {
            area = 3.14 * (r*r);
            return area;
    } // end function circle_area
    void display_msg() {
            cout << "Area: " << circle_area(r) << endl;
    } // end function display_msg
private:
    float area;
    int r;
}; // end class Circle
int main(void) {
    int r;
    cout << "Radius of circle: ";
    cin >> r;
    Circle circle_calc(r);
    circle_calc.display_msg();
}

main()中声明的变量int r与类Circle中的成员变量r无关,即使它们具有相同的名称:它们是两个不同的变量。

编辑:

Circle:类的进一步细化

class Circle {
    public:
        // Constructor.
        Circle(int a_radius) : r(a_radius) {}
        // function that calculates the area of a circle
        float circle_area() { return 3.14 * r * r; }
        void display_msg() {
            cout << "Area: " << circle_area() << endl;
        }
    private:
        int r;
}; // end class Circle

更改:

  • area不需要是成员变量(如Fred Larson所述)
  • r不需要传递给circle_area()成员函数,因为r是成员变量,所以circle_area()可以访问它