C/C++

Функцию или оператор надо сделать для класса? Cи++

Здравствуйте, меня интересует вопрос по "...выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов..." (Внизу все задание)
Если бы это не было ооп, то я бы спокойно создал функцию, однако у меня в голове не укладывается как можно вызвать классовую функцию, чтобы ее массив в параметрах передался и чужой (а лучше весь ее класс)
Оператор вроде не подойдет, так там вроде мы не можно исключать не нужные случаи.

Мне решение не надо, мне просто надо понять как это сделать. Заранее спасибо.
Возможно даже есть теория насчет этого, если есть, то, пожалуйста, скиньте.

Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы массива, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, вывода на экран элемента массива по заданному индексу и всего массива. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
class Array {
public:
Array(const size_t len) : len(len), box(new int[len]) {
for (auto i = 0U; i < len; ++i) box[i] = 0;
}
~Array() {
if (box != nullptr) {
delete[] box;
box = nullptr;
}
}
Array(const Array& a) : len(a.len), box(new int[len]) {
for (auto i = 0U; i < len; ++i) box[i] = a.box[i];
}
Array& operator=(const Array& a) {
if (this != &a) {
delete[] box;
len = a.len;
box = new int[len];
for (auto i = 0U; i < len; ++i) box[i] = a.box[i];
}
return *this;
}
int& operator[](int index)const {
return box[index];
}
int* begin()const {
return box;
}
int* end()const {
return box + len;
}
private:
size_t len;
int* box;
friend Array operator+(const Array& a, const Array& b) {
Array tmp(a.len);
for (auto i = 0U; i < a.len; ++i) tmp[i] = a.box[i] + b.box[i];
return tmp;
}
friend Array operator-(const Array& a, const Array& b) {
Array tmp(a.len);
for (auto i = 0U; i < a.len; ++i) tmp[i] = a.box[i] - b.box[i];
return tmp;
}
};
int main() {
uniform_int_distribution<> uid(10, 25);
mt19937 gen{ random_device()() };
const auto length = 10U;
Array a(length);
for (auto& x : a) x = uid(gen);
for (auto x : a) cout << setw(4) << x;
puts("");
Array b(length);
for (auto& x : b) x = uid(gen);
for (auto x : b) cout << setw(4) << x;
puts("");
Array c(length);
c = a + b;
for (auto x : c) cout << setw(4) << x;
puts("");
Array d = a - b;
for (auto x : d) cout << setw(4) << x;
puts("");
system("pause > nul");
}
Am Nom
Am Nom
83 778
Лучший ответ
Иван Астафьев что у вас значит U?
ну а как обращаются к некоторым функциям, изначально классовым, без создания экземпляра явного? В ооп есть дерективы у объявления методов класса, которые отвечаю, когда и как их можно вызывать для с++.
У класса запросто может быть статичный метод, принимающий в качестве 2 параметров 2 переменные типа вашего класса и возвращающий результат такого-же типа.
И кроме того в задании нигде не сказано, что параметра должно быть 2 и метод не обязательно статичный, он запросто может принимать 1 параметр на вход типа этого же класса, с контролем входа, прибавляя переданное. к соответствующему полю текущего экземпляра класса изменяя значение своего поля.