这是我为项目创建的代码。它的基本内容,但我一定忽略了一些东西,因为当我运行它时,无论我放在什么数字上,它给了我同样的答案:
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;
}
答案 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 ++允许您在不同的范围内声明具有相同名称的变量。因为您在此方法中再次声明它,所以它设置本地版本并且不会以任何方式影响成员变量。