价值不变

Value doesn't change

本文关键字:      更新时间:2023-10-16
// 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 );
相关文章:
  • 没有找到相关文章