坐标类的朋友函数用于极坐标到矩形的转换

时间:2015-02-07 02:47:00

标签: c++ class methods coordinate-transformation

我不知道如何做到这一点我已经工作了几个小时。我的教科书中只有一个朋友班的例子。

这是一个问题“构造一个名为Coord的类,其中包含两个双精度变量 名为xval和yval,用于存储直角坐标中的点的x和y值。 类方法应该包括构造函数和显示方法以及友元函数 命名为convPol()。 convPol()函数应该接受两个双精度数r 和theta,表示极坐标中的一个点并将它们转换为直角坐标。 要从极坐标转换为直角坐标,请使用以下公式: x = r cos(theta) y = r sin(theta)“

这是我想出来的,但我知道我做错了我只是没有一个好的参考点,因为在整本教科书中只有一个糟糕的例子,几乎完全不同。更具体我不知道在哪里使用coord&(如何引用数字),我知道我不应该使用指针。有人能指出我正确的方向吗?

这是我的代码:

#include <iostream>
#include <cmath>
using namespace std;
//ƒclassƒdeclarationƒsection
void ConvPol(double r,double theta, double& xval, double& yval)
{ 
double x,y;
 xval=r*cos(theta);
 yval=r*sin(theta);
 return;
}

class Coord
{
  //ƒfriendsƒlist
  friend double ConvPol(Coord&);
  private:
  double xval;
  double yval;
  public:

    Coord (double = 0, double = 0);  //ƒconstructor
    void display();
};
//ƒclassƒimplementationƒsection
Coord::Coord(double x, double y)
{
  xval = x;
  yval = y;

}
void Coord::display()
{
cout <<xval<<","<<yval;
  return;
}
//ƒfriendƒimplementations
void time(double, double, double&, double&);

int main()
{ double xval,yval;
  ConvPol(1,5,xval,yval);
  Coord a(xval,yval); 
  a.display();
  return 0;
}

1 个答案:

答案 0 :(得分:0)

看起来你很困惑。这是我的理解:

class Coord
{
  friend void ConvPol(Coord& point,
                      double rho, // length
                      double angle);
};

void ConvPol(Coord& point, double rho, double angle)
{
  point.x = rho * cos(angle);  // Assign to the point member x
  point.y = rho * sin(angle);  // Assign to the point member y.
}  

根据要求,ConvPol函数从极坐标(rho,angle)转换为笛卡尔坐标(x,y)。因此,该函数需要rhoangle

由于该函数是独立的(不在方法中),因此需要Coord实例来接收转换后的值。它通过引用传递,因为参数将被修改(根据函数的内容)。

该函数不返回任何内容,因此它的返回类型为void

因为函数是friend Coord,函数可以直接访问数据成员,就好像没有任何访问权限(如struct)。