c ++程序错误的结果

时间:2011-12-10 19:22:35

标签: c++

这是我为项目创建的代码。它的基本内容,但我一定忽略了一些东西,因为当我运行它时,无论我放在什么数字上,它给了我同样的答案:

radious given:288  
x=260444.

为什么会这样?

#include <iostream>
#include <stdlib.h>
#include <math.h>
#define pi 3.14

using std::cout;
using std::cin;
using std::endl;


class Circle 
{
private:          
    int Radious;
public:
    bool setRadious(int R);
    int getRadious(){return Radious;}
    double getx();
};


bool Circle::setRadious(int R)
{   
    bool RadiousSet = false;

    if (R > 0) //check validity of R
    {
        int Radious = R;
        RadiousSet = true;
    }     
    return RadiousSet;
}

//x = pi *R^2
double Circle::getx()
{
    return  pi*pow(Radious,2);
}

// -----------------------------

int main()
{
    int R=0;
    bool rslt;

    Circle myCircle;  


    cout<<"Give Radious: ";
    cin>>R;
    rslt = myCircle.setRadious(R);

    if(rslt == true) 
    {
        cout << "Radious given: " <<myCircle.getRadious();
        cout<<"x: "<<myCircle.getx()<<endl;
    }
    else
        cout<<"Radious must be greater than zero"<<endl;

    system("pause");
    return 0;

}

4 个答案:

答案 0 :(得分:7)

改变这个:

if (R > 0) //check validity of R
{
    int Radious = R;
    RadiousSet = true;
} 

到此:

if (R > 0) //check validity of R
{
    Radious = R;
    RadiousSet = true;
} 

您正在将Radious重新声明为shadows the one you want的本地变量。函数返回后,它的值会丢失。

答案 1 :(得分:4)

bool Circle::setRadious(int R)
{   
 bool RadiousSet = false;

  if (R > 0) //check validity of R
  {
     int Radious = R;  // <== problematic line
     RadiousSet = true;
  }     
    return RadiousSet;
}

您创建并分配本地Radious。移除前面的int,这会导致R分配给成员变量Radious

它应该是“Radius”btw。

答案 2 :(得分:2)

这一行

int Radious = R;

应该阅读

Radious = R;

您正在创建一个局部变量(函数级别),它会隐藏类级别变量。然后,您将R分配给该变量,然后在离开范围时将其销毁。

答案 3 :(得分:1)

您正在Radius函数中重新声明本地范围内的setRadious变量。

变化:

int Radious = R;

为:

Radious = R;

C ++允许您在不同的范围内声明具有相同名称的变量。因为您在此方法中再次声明它,所以它设置本地版本并且不会以任何方式影响成员变量。