2012-01-12 9 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'へのアクセス権を持っているように、n'私はOPは、スコープの概念を理解していない疑いがある – Mahesh

答えて

7

メンバ変数Circle::rが設定されることはありませんが、main()内のローカル変数rcin介して設定されたが、使用されることはありません。

このような何かをしたいしたいことがあります。

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とは関係ありません。彼らは、異なる2つです変数。

EDIT:

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(フレッド・ラーソンで述べたように)
  • メンバ変数である必要はありません。 rは、circle_area() member functioに渡す必要はありませんrは、メンバ変数であるので、circle_area()はクラスのメンバ変数とは異なり、メインでそれ
+2

をr'。 'area'変数はクラスのメンバである必要はありません。 –

関連する問題