价值不变
Value doesn't change
// Example program
#include <iostream>
#include <string>
using namespace std;
class circle {
private:
double r;
double const pi=3.14;
public:
circle(double rad){
r=rad;
}
void periArea(){
double p,s;
p=2*pi*r;
s=pi*pi*r;
cout<<"nS= "<<s<<endl;
cout<<"nP= "<<p<<endl;
}
friend void changeRad(circle circle, double newrad);
};
void changeRad(circle circle, double newrad){
circle.r=newrad;
}
int main()
{
double inpr,newr;
cout<<"input radius: ";
cin>>inpr;
circle c1(inpr);
c1.periArea();
cout<<"ninput new radius: ";
cin>>newr;
changeRad(c1,newr);
c1.periArea();
}
我有这个CPP代码必须定义一个类圆圈,该类圆圈计算周边和区域,然后使用朋友函数更改半径并再次计算区域和周长。但是,即使在更改函数之后,我也获得了相同的P和S值。
粗鲁,您需要更改功能以通过参考:
传递圆圈void changeRad(circle& circle, double newrad){
(注意&
的使用(。否则,circle
实例的副本将传递给该函数,并且该副本的任何更改都不会反映在原始内容中。
但是, normal 做事的方法是安排代码,以便您使用
c1.changeRad(newr);
在呼叫网站上。
此外,您使用double
将PI存储到仅3个重要数字的数字非常糟糕。我最喜欢的方法是使用
const double PI = std::atan(1.0) * 4;
由于C 标准确实不是为您定义PI(M_PI
是POSIX,而不是ISO!(。
您必须通过参考
传递对象。friend void changeRad( circle &circle, double newrad);
^^^
考虑到,当它的名称与类型的名称一致时,这是对参数的有效声明,但这可能会使读取器混淆,参数的名称隐藏了该类型的名称。因此,最好重命名参数的名称,例如
friend void changeRad( circle &c, double newrad);
^^
也最好使该功能成为类的非静态成员。例如
void changeRad( double newrad );
相关文章:
- 没有找到相关文章