由面向过程转到面向对象程序时易犯的错误
#include "iostream" //包含C++标准头文件 using namespace std; //使用c++标准命令空间的标准定义 class circle { public: double r; double pi = 3.14; double area = pi*r*r; }; int main() { circle circle_1; cout << "please input the radius" << endl; cin >> circle_1.r; cout << circle_1.area << endl; system("pause"); return 0; }
运行结果如下:
分析错误原因:
1、程序运行到circle1.circle的时候,在栈上分配内存如下(C语言中的内存四区模型同样适用于c++)
2、执行到cin >> circle1.r的时候,我们确实将r的值变成了10.
3、执行到cin <<circle1.area<<endl; 的时候,r的值虽然变为10,但是c++编译器不会主动调用area= pi * r * r;
circle1.area,只是在circle1 circle的时候才执行。
出错的原因:在你通过类型定义变量的时候,area的值就已经确定下来了。
解决方法:
class circle { public: double r; double pi = 3.14; double area; double getS() { area = pi*r*r; return area; } }; int main() { circle circle_1; cout << "please input the radius" << endl; cin >> circle_1.r; cout << circle_1.getS()<< endl; system("pause"); return 0; }
运行结果:
定义成员函数,在调用成员函数的时候,会重新执行该函数。