Я понятия не имею, как это сделать, я работаю над этим часами. В моем учебнике есть только один пример классов друзей.
Это вопрос «Создайте класс с именем Coord, содержащий две переменные двойной точности
именованные xval и yval, используются для хранения значений x и y точки в прямоугольных координатах.
Методы класса должны включать в себя методы конструктора и отображения и функцию друга
названный convPol (). Функция convPol () должна принимать два числа двойной точности, r
и тэта, представляющая точку в полярных координатах и преобразующая их в прямоугольные координаты.
Для преобразования из полярных в прямоугольные координаты используйте следующие формулы:
x = r cos (тета)
у = г грех (тета)
Это то, что я придумал, но я знаю, что делаю это неправильно, у меня просто нет хорошего ориентира, поскольку во всем учебнике есть только один паршивый пример, и он почти полностью отличается. чтобы быть более конкретным, я не знаю, где использовать ско&(как ссылаться на число), и я знаю, что я не должен был использовать указатели. Может кто-нибудь указать мне правильное направление, пожалуйста?
Это мой код:
#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
экземпляр для получения преобразованных значений. Он передается по ссылке, потому что параметр будет изменен (согласно содержимому функции).
Функция ничего не возвращает, поэтому она имеет тип возврата void
,
Потому что функция friend
из Coord
функция может обращаться к членам данных напрямую, как если бы не было никаких прав доступа (например, struct
).