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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Умножение вектоа на число, Помогите перегрузить операцию* 
V
    Опции темы
a11en
Дата 4.11.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я новичок в объектно-ориентированом программирование и есть задание перегрузки функций/операций, я решил сделать программу позволяющую выполнять операции над векторами, сколярное произведение сделал легко, а вот умножение вектора на число не получается...
короче есть класс vector к которому собствено пренадлежит перегружаемая операция, т.е.
Код

...
class vector
{
...
public:
...
vector operator*(/*по идеи тут должен быть только один формальный параметр*/vector t);
...
};
...
vector vector::operator(vector t)
{
vector v;
v.x=c*t.x;
v.y=c*t.y;
v.z=c*t.z;
return v;
}
...
void main()
{
vector a, b;
a.add(1,2,3);//метод присваивания координат вектору его я сам описал
int c=3;
...
b=c*a;// = я тоже перегрузил под присваивание векторов
...
}


Что не правильно??? если не понятно объяснил извените первый раз обращаюсь за помощью в интернете...
PM MAIL ICQ   Вверх
Daevaorn
Дата 4.11.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



a11en, 
Код

class vector
{
public:
    vector operator*( int c );
    ...
};
...
vector vector::operator*( int c )
{
    vector v;
    v.x=c * x;
    v.y=c * y;
    v.z=c * z;
    return v;
}
void main()
{
    vector a, b;
    a.add(1,2,3);//метод присваивания координат вектору его я сам описал
    int c=3;
    
    b=a * c;// = я тоже перегрузил под присваивание векторов
}

PM MAIL WWW   Вверх
a11en
Дата 5.11.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Daevaorn, большое спасибо, все получилось.
PM MAIL ICQ   Вверх
cardinal
Дата 6.11.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



a11en, лови код поподробней...
Код

#ifndef VEC3F_HXX
#define VEC3F_HXX
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <assert.h>
//#include <sys/times.h>

//#include <sys/types.h>
//#include <sys/stat.h>

#include <strings.h>
#include <stdarg.h>
#include <errno.h>

#include <iostream>
#include <fstream>

#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
#define MAX(a,b) ((a)>(b)?(a):(b))
#endif

#define max(a,b) MAX(a,b)
#define min(a,b) MIN(a,b)

#define Epsilon 1E-4
#define Infinity HUGE_VAL

using namespace std;

class Vec3f 
{
public:
  float x,y,z;

  Vec3f() 
  {};
  Vec3f(float x,float y, float z) 
    : x(x),y(y),z(z) 
  {};
  Vec3f(float f)
    : x(f),y(f),z(f)
  {};

  inline const float &operator[](const int i) const
  { return *(&x+i); }; 

  inline float &operator[](const int i)
  { return *(&x+i); }; //((float *)(this))[i]; };

  inline Vec3f &operator=(const Vec3f &b)
  { x = b.x; y = b.y; z = b.z; return *this;};
  
  inline void SetMin(Vec3f &other)
  { 
    x = min(x,other.x);
    y = min(x,other.y);
    z = min(x,other.z);
  };
  inline void SetMax(Vec3f &other)
  { 
    x = max(x,other.x);
    y = max(x,other.y);
    z = max(x,other.z);
  };
};

inline float Dot(const Vec3f &a, const Vec3f &b)
{ return a.x*b.x+a.y*b.y+a.z*b.z; };

inline Vec3f Product(const Vec3f &a, const Vec3f &b)
{ return Vec3f(a.x*b.x,a.y*b.y,a.z*b.z); };

inline Vec3f Cross(const Vec3f &a, const Vec3f &b)
{ return Vec3f(a.y*b.z-a.z*b.y,
        a.z*b.x-a.x*b.z,
        a.x*b.y-a.y*b.x); };

inline Vec3f operator-(const Vec3f &v)
{ return Vec3f(-v.x,-v.y,-v.z); };

inline float Length(const Vec3f &v)
{ return sqrt(Dot(v,v)); };

inline Vec3f operator*(const float f, const Vec3f &v)
{ return Vec3f(f*v.x, f*v.y, f*v.z); };

inline Vec3f operator*(const Vec3f &v, const float f)
{ return Vec3f(f*v.x, f*v.y, f*v.z); };

inline void operator*=(Vec3f &v, const float f)
{ v.x *= f; v.y*=f; v.z*=f; };

inline void operator*=(Vec3f &v, const Vec3f &f)
{ v.x *= f.x; v.y*=f.y; v.z*=f.z; };

inline Vec3f operator/(const Vec3f &v, const float f)
{ return (1/f)*v; };

inline void operator/=(Vec3f &v, const float f)
{ v *= (1/f); };

inline Vec3f operator+(const Vec3f &a, const Vec3f &b)
{ return Vec3f(a.x+b.x, a.y+b.y, a.z+b.z); };

inline Vec3f &operator+=(Vec3f &a, const Vec3f &b)
{
  a.x += b.x;
  a.y += b.y;
  a.z += b.z;
  return a;
}

inline Vec3f operator^(const Vec3f &a, const Vec3f &b)
{ return Vec3f(a.y*b.z-a.z*b.y,
           a.z*b.x-a.x*b.z,
           a.x*b.y-a.y*b.x); };


inline Vec3f operator-(const Vec3f &a, const Vec3f &b)
{ return Vec3f(a.x-b.x, a.y-b.y, a.z-b.z); };

inline void Normalize(Vec3f &v)
{ v *= (1./Length(v)); };

inline ostream &operator<<(ostream &o,const Vec3f &v)
{ o << "(" << v.x << "," << v.y << "," << v.z << ")"; return o; }

inline Vec3f Min(const Vec3f a, const Vec3f b)
{ return Vec3f(MIN(a.x,b.x),MIN(a.y,b.y),MIN(a.z,b.z)); }

inline Vec3f Max(const Vec3f a, const Vec3f b)
{ return Vec3f(MAX(a.x,b.x),MAX(a.y,b.y),MAX(a.z,b.z)); }

#endif



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
a11en
Дата 6.11.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



cardinal, что то ты сложно все написал, а вообще я же говорю, что все сделал
PM MAIL ICQ   Вверх
cardinal
Дата 7.11.2006, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(a11en @  6.11.2006,  16:09 Найти цитируемый пост)
cardinal, что то ты сложно все написал, 

Во-первых никто тебя не заставляет все это понимать.
Во-вторых то, что я написал будет работать быстрее (см. inline).
В третьих - тебе не нужны другие операции над вектором?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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