Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление угла и расстояния вектора [C++], с использованием дружественной функцией 
:(
    Опции темы
ArniLand
Дата 27.2.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



В задание нужно подсчитать радиус и угол фи и вывести с помощью метода вывода  результаты на экран. Также нужно использовать в программе дружественную функцию.
Вот выкладываю свой код. Пользуюсь компилятором Visual studio professional 2008. В строке 14 и 15 cpp файла компилятор жалуется на то, что эти переменные m_x1, m_x2, m_y1, m_y2 не описанные. Тогда я не совсем понимаю назначение дружественных. Если она имеет права доступа к private переменным, то почему оно выдает ошибки на то что функции подсчета радиуса объявленные закрытыми. Объясните пожалуйста что я не так правильно понял и сделал в программе.
vector.h
Код

class Vector
{
friend double polarRadius();//здесь объявил дружественную функцию
public:
    Vector( int x1, int x2, int y1, int y2 );
    ~Vector();
    double polarFi();
    void out();
private:
    int m_x1;
    int m_x2;
    int m_y1;
    int m_y2;
};


cpp файл
Код

#include "stdafx.h"
#include "vector.h"
#include "math.h"
#include "iostream"
Vector::Vector( int x1, int x2, int y1, int y2 )
    : m_x1( x1 ) , m_x2( x2 ) , m_y1( y1 ) , m_y2( y2 )
{
}
Vector::~Vector()
{ 
}
double polarRadius()// функцию которую объявил в классе дружественной
{
    double dx = ( m_x2 - m_x1 );
    double dy = ( m_y2 - m_y1 );
    return sqrt( dx * dx + dy * dy );
}
double Vector::polarFi()
{
    const double EPSILON = 1e-22;
    double dx = ( m_x2 - m_x1 );
    double dy = ( m_y2 - m_y1 );
    if ( dy < EPSILON ) {
        return 90.0;
    }
    return atan( dx / dy ) /  3.1415 * 180.0;
}
void Vector::out()
{
    std::cout << "x1 = " << m_x1 << std::endl;
    std::cout << "x2 = " << m_x2 << std::endl;
    std::cout << "y1 = " << m_y1 << std::endl;
    std::cout << "y2 = " << m_y2 << std::endl;
    std::cout << "dx = " << m_x2 - m_x1 << std::endl;
    std::cout << "dy = " << m_y2 - m_y1 << std::endl;
    std::cout << "radius = " << polarRadius() << std::endl;
    std::cout << "fi = " << polarFi() << " grad" << std::endl;
}



main.cpp
Код

#include "stdafx.h"
#include "vector.h"
#include "math.h"
#include "iostream"
int main()
{
    Vector v( 1, 3, 4, 5 );
    v.out();
    return 0;
}


Это сообщение отредактировал(а) ArniLand - 27.2.2010, 17:18
PM MAIL   Вверх
xvr
Дата 27.2.2010, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Дружественная функция имеет доступ ко всем потрохам класса, но она НЕ является методом класса, т.е. у нее нет неявного параметра this, и к полям класса (без указания собственно инстанса, откуда эти поля брать), она обращаться не сможет

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0392 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.