Coordinate class 的友元函数,用于极坐标到直角坐标的转换
Friend function of Coordinate class for polar-to-rectangular conversion
我不知道该怎么做我已经研究了几个小时了。我的教科书上只有一个朋友class的例子。
本题“构造一个class命名的Coord包含两个双精度变量
命名为xval和yval,用于存储直角坐标中点的x和y值。
class 方法应包括构造函数和显示方法以及友元函数
名为 convPol()。 convPol() 函数应该接受两个双精度数,r
和 theta,表示极坐标中的一个点并将它们转换为直角坐标。
要从极坐标转换为直角坐标,请使用以下公式:
x = r cos(θ)
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;
}
看起来你很困惑。这是我的理解:
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)。所以,函数需要 rho
和 angle
.
由于函数是独立的(不在方法中),它需要一个 Coord
实例来接收转换后的值。它通过引用传递,因为参数将被修改(根据函数的内容)。
该函数不 return 任何东西,因此它具有 return 类型的 void
。
因为该函数是 Coord
的 friend
,该函数可以直接访问数据成员,就好像没有任何访问权限一样(如 struct
)。
我不知道该怎么做我已经研究了几个小时了。我的教科书上只有一个朋友class的例子。
本题“构造一个class命名的Coord包含两个双精度变量 命名为xval和yval,用于存储直角坐标中点的x和y值。 class 方法应包括构造函数和显示方法以及友元函数 名为 convPol()。 convPol() 函数应该接受两个双精度数,r 和 theta,表示极坐标中的一个点并将它们转换为直角坐标。 要从极坐标转换为直角坐标,请使用以下公式: x = r cos(θ) 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;
}
看起来你很困惑。这是我的理解:
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)。所以,函数需要 rho
和 angle
.
由于函数是独立的(不在方法中),它需要一个 Coord
实例来接收转换后的值。它通过引用传递,因为参数将被修改(根据函数的内容)。
该函数不 return 任何东西,因此它具有 return 类型的 void
。
因为该函数是 Coord
的 friend
,该函数可以直接访问数据成员,就好像没有任何访问权限一样(如 struct
)。