2012-01-12 107 views
0

该地区始终输出“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

'r'在主要是从类成员变量不同'r' – Mahesh 2012-01-12 21:20:07

回答

7

成员变量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 rCircle类是不相关的成员变量r,即使它们具有相同的名称:它们是两个不同变量。

编辑:

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 

变化:

Circle类的进一步细化

  • area并不需要是一个成员变量(如由Fred拉尔森说明)
  • r不需要传递给circle_area()成员函数N作为r是一个成员变量,所以circle_area()有权访问它
+2

我怀疑OP不理解的范围的概念。 'area'变量不需要是类的成员。 – 2012-01-12 21:20:04

相关问题