Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] классы


Автор: Elinochka 5.12.2007, 22:42
Помогите пожалуйста с этим заданием =((((((
Создать класс “POINT”,  в котором хранятся два числа –  координаты точек. В классе создать следующие методы: (1) конструктор, при помощи которого подаются начальные значения, 
(2) деструктор, который сообщает о ликвидации объекта, 
(3) метод “CHANGE” с двумя параметрами, которые изменяют значения координат точки на соответствующие количество (а не меняет), 
(4) метод “PRINT”, который выводит на экран координаты данной точки, 
(5) метод „DISTANCE” с двумя аргументами – координатами другой точки, которые выводят расстояние между этими двумя точками. 

Автор: JackYF 5.12.2007, 23:06
Скорее всего, тебе в Центр Помощи.

Автор: baldina 5.12.2007, 23:16
Как же я люблю студентов  smile 

Код

#include <iostream>
#include <cmath>

class POINT {

public:
   POINT (double, double); //конструктор
   ~POINT (); //деструктор
   void CHANGE(double,double);
   void PRINT () const;
   double DISTANCE (const POINT&) const;
private:
   double x_,y_;
};

POINT::POINT (double x, double y) : x_(x), y_(y) {}

POINT::~POINT () 
{ 
  std::cout << "Сообщаю о разрушении объекта\n"; 
}

void POINT::CHANGE (double dx, double dy)
{
   x_ += dx;
   y_ += dy;
}

void POINT::PRINT() const
{
   std::cout << "Point at (" << x_ << "," << y_ << ")\n"; 
}

double POINT::DISTANCE (const POINT& p) const
{
   double dx = x_ - p._x;
   double dy = y_ - p._y;

   return sqrt (dx*dx + dy*dy);
}



не очень понятно про два аргумента функции DISTANCE, но если не предполагается, что это нестатический метод класса, то может быть так:

class POINT {
...
  static double DISTANCE (const POINT& p1, const POINT& p2)
  {
   double dx = p1.x_ - p2._x;
   double dy = p1.y_ - p2._y;

   return sqrt (dx*dx + dy*dy);
  }
...
};

Автор: DonJuansMagicPants 5.12.2007, 23:35
Код

#include <iostream>
#include <math.h>
using namespace std;

class point 
{
private:
    int x,y;
public:
    point(): x(0),y(0)
    {}
    ~point()
    {cout<<"delete"<<endl;}
    
    int change (int n1, int n2)
    {
        x+=n1;
        y+=n2;
        return (x,y);
    }

    void print () 
    {
        cout<<"("<<x<<","<<y<<")"<<endl;
    }

    double distance (int pax, int pay)
    {
        double dist = (x-pax)^2+(y-pay)^2;
        return (sqrt(dist));
    }
};


Затык в методе distance от чего-то возвращает обратно значения x и y , должен квадратный корень из dist, посмотрите умудренные опытом почему так ?
    

Автор: JackYF 6.12.2007, 01:36
Цитата(DonJuansMagicPants @  5.12.2007,  23:35 Найти цитируемый пост)
double dist = (x-pax)^2+(y-pay)^2;

бейсиком надо меньше заниматься smile

"^" в С++ - операция побитового xor. Для степени есть функция pow.
Или здесь уже
Код

double dist = (x-pax)*(x-pax)+(y-pay)*(y-pay);

Автор: Earnest 6.12.2007, 09:33
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Elinochka 7.12.2007, 14:59
А как выглядит main часть этой программы? Напишите пожалуйста =((((((


Автор: baldina 8.12.2007, 03:33
Вы издеваетесь?
У вас задание - "создать класс". Класс у вас есть. Функция main здесь совершенно ни к чему.
Понимаю, вам нужно написать законченную программу с использованием этого класса, что-то вроде тестирования. Ну так придумайте что-нибудь сами, создайте пару объектов типа POINT и повызывайте для них методы.

Автор: Elinochka 8.12.2007, 11:28
baldina, я не издеваюсь, я всего лишь попросила помощи. C классами я столкнулась первый раз, потому и не знаю как их сделать правильно вместе с main частью программы :((((

Автор: baldina 8.12.2007, 22:39
Ок. Вам требуется в функции main сделать нечто, показывающее, что класс работоспособен.
Для этого вводим переменную типа POINT и выполняем над ней некие действия.
Типа так:

Код

int main ()
{
  POINT p (1,2);
 
  p.PRINT ();

  POINT p2 = p;
 
  p.CHANGE (3,4);

  p.PRINT ();

  double distance = p.DISTANCE (p2);

  std::cout << "Distance between these points is " << distance << std::endl;

  return 0;
}

Автор: Elinochka 9.12.2007, 17:31
baldina, Спасибо огромное =))

Автор: Elinochka 9.12.2007, 21:13
baldina, скажите пожалуйста, можно ли как то написать эту строчку проще?

POINT::POINT (double x, double y) : x_(x), y_(y) {}

Автор: baldina 10.12.2007, 00:29
Да уж куда проще...

Так

Код

POINT::POINT (double x, double y)
{
   x_ = x;
   y_ = y;
}


понятней?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)