2015-02-07 7 views
-1

У меня нет подсказки, как это сделать, я работал над этим часами. В моем учебнике есть только один пример классов друзей.Функция друга класса Координаты для преобразования по полю прямоугольника

Это вопрос "Построить класс с именем Coord, содержащего две двойной точности переменные с именем xval и yval, используемый для хранения х и у значений точки в прямоугольных координатах. Методы класса должны включать в себя конструктор и дисплей методы и функцию друга с именем 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

Если у вас есть конкретный вопрос/проблема/ошибка, здесь это offtopic и его нужно переместить на http://codereview.stackexchange.com. – smci

+0

Кроме того, тег [tag: r] относится к языку программирования R. Не когда у вас есть переменная под названием R ;-) – smci

+2

Объявление 'ConvPol', как друга в классе' Coord', не соответствует требованиям. Попробуйте 'friend void ConvPol (координата и точка, double rho, double theta);' –

ответ

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, угол) в декартовой системе координат (х, у). Таким образом, функции нужны rho и angle.

Поскольку функция является отдельно стоящей (не в методе), для получения преобразованных значений требуется экземпляр Coord. Он передается по ссылке, потому что параметр будет изменен (по содержимому функции).

Функция ничего не возвращает, поэтому имеет тип возврата void.

Поскольку функция является friendCoord, функция может обращаться к членам данных напрямую, как если бы не было прав доступа (например, struct).

+0

Спасибо Томасу, это очень полезно. Я буду работать над проблемой и отправить ее позже. Этот раздел был примерно 2 страницы в моей книге только с одним странным примером, еще раз оцените его. – Thejohn831

+0

Эта проблема была на самом деле не так сложна с вашими объяснениями.Спасибо, Томас, ты действительно разобрался! – Thejohn831

+0

Если этот ответ помог, нажмите на галочку. –

Смежные вопросы