1、错误代码
#include "iostream"
using namespace std;
class circle
{
public:
double r;
double pi = 3.1415926;
double area = pi*r*r;
};
int main()
{
circle c1;
cout << "please input your r:" << endl;
cin >> c1.r;
cout << "area is " << c1.area << endl;
return 0;
system("pause");
}
如果此时键盘输入r的值,你会发现area是一个随机值,并不是你想要的那个结果。
2、分析
通过内存四区的模型来分析,当类circle定义的时候,并不会分配内存。
当用类circle定义一个变量c1时,这时会为c1分配内存并初始化这个变量。初始化情况c1.r是一个随机值,c1.pi是3.1415926,c1.area也是一个随机值。
在对c1.r做输入改变的时候,并没有去改变c1.area,所以c1.area还是一个随机值。
当c1.area执行的时候,只是从变量的内存空间里读取数据,并没有执行pi*r*r。
正确的做法是在类里面定义一个成员函数,函数里面执行操作,这样调用的时候就会执行操作了。
如下:
#include "iostream"
using namespace std;
class circle
{
public:
double r;
double pi = 3.1415926;
double area = pi*r*r;
double getS()
{
area = pi*r*r;
return area;
}
};
int main()
{
circle c1;
cout << "please input your r:" << endl;
cin >> c1.r;
cout << "area is " << c1.area << endl;//乱码,随机值
cout << "area is " << c1.getS<< endl;//正确
return 0;
system("pause");
}