2012-01-12 106 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

相關問題