Форум программистов, компьютерный форум CyberForum.ru

Перегрузка функции(Создать класс Vector – вектор.) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
08.06.2013, 11:28     Перегрузка функции(Создать класс Vector – вектор.) #1
Создать класс Vector – вектор, используя динамическую память.
Определить операторы "+" – поэлементное сложения векторов, "-" – поэлементное вычитание векторов, "=" – присваивания, как методы класса. Определить операторы сравнения "==", "!=", "<", ">", как дружественные функции. Для реализации последних двух операторов определить функцию, вычисляющую норму элементов вектора.
Перегрузить операторы "<<" и ">>" для ввода/вывода в поток.
Класс должен содержать все необходимые конструкторы и деструктор.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
08.06.2013, 11:35     Перегрузка функции(Создать класс Vector – вектор.) #2
вам в раздел http://www.cyberforum.ru/freelance/
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
08.06.2013, 12:34  [ТС]     Перегрузка функции(Создать класс Vector – вектор.) #3
Если бы мне нужно было в тот раздел, я бы там и создал.
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
08.06.2013, 12:43     Перегрузка функции(Создать класс Vector – вектор.) #4
бесплатно такое не пишут. Oliver прав.
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
08.06.2013, 12:54  [ТС]     Перегрузка функции(Создать класс Vector – вектор.) #5
Ясно, спасибо за ответ.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
08.06.2013, 14:40     Перегрузка функции(Создать класс Vector – вектор.) #6
Цитата Сообщение от Olivеr Посмотреть сообщение
Цитата Сообщение от Belfegor Посмотреть сообщение
бесплатно такое не пишут. Oliver прав.
Да ладно вам. Элементарная же задача.

Сделал не дружественными функциями, но если вам это очень надо, перенесите их в класс и допишите friend перед определением.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <cmath>
 
template <class T>
class Vector {
 public:
  explicit Vector(size_t size) : size(size), data(new T[size]()) {}
  Vector(const Vector &other) : size(0), data(0) {
    copyFrom(other);
  }
  Vector &operator=(const Vector &other) {
    return copyFrom(other);
  }
  virtual ~Vector() {
    delete [] data;
  }
  Vector &copyFrom(const Vector &v) {
    if (this != &v) {
      delete [] data;
      size = v.size;
      data = new T[size];
      for (size_t i = 0; i < size; ++i) {
        data[i] = v.data[i];
      }
    }
    return *this;
  }
  size_t getSize() const {
    return size;
  }
  double getLength() const {
    double length = 0;
    for (size_t i = 0; i < getSize(); ++i) {
      length = pow(data[i], 2.0);
    }
    return sqrt(length);
  }
  const T &get(size_t i) const {
    return data[i];
  }
  T &get(size_t i) {
    return data[i];
  }
  const T &operator[](size_t i) const {
    return data[i];
  }
  T &operator[](size_t i) {
    return data[i];
  }
 private:
  size_t size;
  T *data;
};
 
template <class T>
std::ostream &operator<<(std::ostream &stream, const Vector<T> &v) {
  stream << "[";
  for (size_t i = 0; i < v.getSize(); ++i) {
    stream << v[i];
    if (i < v.getSize() - 1) {
      stream << ", ";
    }
  }
  return stream << "]";
}
 
size_t max(size_t a, size_t b) {
  return ((a > b) ? a : b);
}
 
size_t min(size_t a, size_t b) {
  return ((a < b) ? a : b);
}
 
template <class T>
Vector<T> operator+(const Vector<T> &a, const Vector<T> &b) {
  const Vector<T> &minVector = (a.getSize() < b.getSize()) ? a : b;
  const Vector<T> &maxVector = (a.getSize() >= b.getSize()) ? a : b;
  size_t minSize = min(a.getSize(), b.getSize());
  size_t maxSize = max(a.getSize(), b.getSize());
  Vector<T> result(maxSize);
  
  for (size_t i = 0; i < minSize; ++i) {
    result[i] = minVector[i] + maxVector[i];
  }
 
  for (size_t i = minSize; i < maxSize; ++i) {
    result[i] = maxVector[i];
  }
  return result;
}
 
template <class T>
Vector<T> operator-(const Vector<T> &v) {
  Vector<T> result(v);
  for (size_t i = 0; i < result.getSize(); ++i) {
    result[i] = -result[i];
  }
  return result;
}
 
template <class T>
Vector<T> operator-(const Vector<T> &a, const Vector<T> &b) {
  return operator+(a, -b);
}
 
template <class T>
bool operator==(const Vector<T> &a, const Vector<T> &b) {
  return a.getLength() == b.getLength();
}
 
template <class T>
bool operator!=(const Vector<T> &a, const Vector<T> &b) {
  return !operator=(a, b);
}
 
template <class T>
bool operator<(const Vector<T> &a, const Vector<T> &b) {
  return a.getLength() < b.getLength();
}
 
template <class T>
bool operator>(const Vector<T> &a, const Vector<T> &b) {
  return a.getLength() > b.getLength();
}
 
template <class T>
bool operator<=(const Vector<T> &a, const Vector<T> &b) {
  return a.getLength() <= b.getLength();
}
 
template <class T>
bool operator>=(const Vector<T> &a, const Vector<T> &b) {
  return a.getLength() >= b.getLength();
}
 
int main(int, char **) {
  Vector<int> a(5), b(6);
  a[4] = 1;
  b[5] = 2;
  std::cout << (a - b) << std::endl;
  return 0;
}
Yandex
Объявления
08.06.2013, 14:40     Перегрузка функции(Создать класс Vector – вектор.)
Ответ Создать тему
Опции темы

Текущее время: 17:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru