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

时间:2012-01-12 21:14:12

标签: c++

该区域始终输出“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();
}

1 个答案:

答案 0 :(得分:7)

永远不会设置成员变量Circle::rr中的局部变量main()是通过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();
}

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

编辑:

进一步完善课程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()可以访问它