#include <iostream>
using namespace std;
class Circle{
public:
void setR(double r){
m_r = r;
}
double getR() {
return m_r;
}
double getArea(){
return area;
}
double getGirth(){
return girth;
}
private:
double m_r;
double area = m_r * m_r * 3.14; //面积 不能给类的属性这样初始化
double girth = 3.14 * 2 * m_r; //周长 不能给类的属性这样初始化
};
int main(void){
Circle circle;
circle.setR(30.0);
cout << "circle 的半径是 " << circle.getR() << " circle的周长是" << circle.getGirth() << " circle的面积是" << circle.getArea() << endl;
}
当执行该代码的时候会出现乱码是因为:
初始化的时候已经执行,当时m_r是一个随机值。当执行circle.getGirth()的时候,只是从变量所标示的内存空间中拿值,并没有执行3.14 * 2 * m_r
结果:造成girth变量是一个乱码
推荐这样写:
#include <iostream>
using namespace std;
class Circle{
public:
void setR(double r){
m_r = r;
}
double getR() {
return m_r;
}
double getArea(){
area = m_r * m_r * 3.14; // 当在方法中给属性赋值时可以避免乱码
return area;
}
double getGirth(){
girth = 3.14 * 2 * m_r; // 当在方法中给属性赋值时可以避免乱码
return girth;
}
private:
double m_r;
double area; //面积
double girth; //周长
};
int main(void){
Circle circle;
circle.setR(10.0);
cout << "circle 的半径是 " << circle.getR() << " circle的周长是" << circle.getGirth() << " circle的面积是" << circle.getArea() << endl;
}