2015-02-07 108 views
-1

我不知道如何做到这一点,我一直在为它工作几个小时。我的教科书中只有一个朋友班的例子。坐标类的极坐标到矩形转换的朋友函数

这是问题“构建体命名坐标类含有两个双精度变量 命名XVAL和yval,用于一个点的x和y值存储在矩形坐标。 的类的方法应包括构造和显示方法和一个名为convPol()的朋友函数 。convPol()函数应该接受两个双精度数字r 和theta,它们代表极坐标中的一个点并将它们转换为直角坐标 对于从极坐标转换为直角坐标,使用这些公式: x = r cos(theta) y = r sin(theta)“

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

这是我的代码:

#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

除非您有具体问题/问题/错误,否则此处不重要,应移至http://codereview.stackexchange.com – smci 2015-02-07 02:50:34

+0

此外,[tag:r]标记用于R编程语言。不是当你有一个名为R的变量时;-) – smci 2015-02-07 02:51:19

+2

'ConvPol'的声明,作为Coord类中的朋友,与要求不符。试试'friend void ConvPol(Coord&point,double rho,double theta);' – 2015-02-07 02:52:20

回答

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,角),以笛卡尔坐标(X,Y)转换。所以,该功能需要rhoangle

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

函数不返回任何东西,所以它的返回类型为void

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

+0

谢谢Thomas,这非常有帮助。我会解决这个问题并在稍后回复。这一节在我的书中只有2页,只有一个奇怪的例子,再次感谢。 – Thejohn831 2015-02-07 03:16:26

+0

这个问题其实并不难解释。谢谢托马斯,你真的把事情弄清楚了! – Thejohn831 2015-02-07 03:54:57

+0

如果这个答案有帮助,请点击复选标记。 – 2015-02-07 16:52:27