簡體   English   中英

無法弄清楚如何在給定代碼中計算圓的半徑

[英]Cannot figure out how to calculate radius of the circle in the given code

我需要在代碼中計算圓的半徑。

#include <iostream>

#include <cmath>

using namespace std;

class Circle {

float radius;
const float PI=3.14;

public:
Circle(float radius){

    }
    Circle getRadius()
    {
        return radius;
    }
    Circle setRadius(float radius)
    {
        this->radius = radius / PI;
        return radius;
    }
    
    float Area()
    {
        return radius*radius*PI;
    }
    
    float Perimeter()
    {
    
        return 2*radius*PI;
    }
    int equal()
    {
        return Area()==Perimeter();
    
    }

};
int main() {
float r;

    cin >> r;
    Circle c(r);
    cout << c.Perimeter() << endl;
    cout << c.Area() << endl;
    cout << c.equal() <<endl;
    
    
    return 0;

}

我嘗試使用指針,但我無法弄清楚。

Circle(float radius){

}

與成員變量同名的參數不是該成員變量。 相反,它隱藏了成員變量,有效地替換了它,除非你知道去哪里找。 將值傳遞給名為radius的參數不會更改名為radius的成員變量的值,這會使成員radius保持未初始化狀態。

這意味着

float Perimeter()
{
    return 2*radius*PI;
}

和其他函數,不包括setRadius ,對未初始化的變量進行操作,結果將是未定義的。

一種可能的解決方案是確保將成員radius初始化為參數radius的值。

你不能簡單地

Circle(float radius){
    radius = radius;
}

因為只有一個radius ,該成員已經被遮蔽,所以參數radius將其值賦給自己。 這是合法的代碼,所以它可以編譯,但編譯器通常會發出警告。

而是使用

Circle(float radius) : radius(radius) {

}

這利用了Member Initializer List ,它是 C++ 編程語言最重要(而且似乎是教得最少的)功能之一。 它允許您安全地重復使用術語radius ,因為第一個radius必須是成員radius

你也可以

Circle(float radius)  {
    this->radius = radius;
}

顯式使用成員radius ,但對於更復雜的成員,這種方法可能效率低下。 所有的成員變量和基類都在進入構造函數體之前被初始化。 之后你能做的最好的就是分配。 這意味着成員將被默認初始化(如果存在默認構造函數;如果不存在,則必須使用成員初始化列表),然后必須構造一個臨時變量,然后將這個臨時變量分配給成員。 可能有很多額外的工作沒有任何好處。

邊注:

注意this->radius = radius / PI; setRadius中。 這是不尋常的,可能是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM