Здравствуйте, меня интересует вопрос по "...выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов..." (Внизу все задание)
Если бы это не было ооп, то я бы спокойно создал функцию, однако у меня в голове не укладывается как можно вызвать классовую функцию, чтобы ее массив в параметрах передался и чужой (а лучше весь ее класс)
Оператор вроде не подойдет, так там вроде мы не можно исключать не нужные случаи.
Мне решение не надо, мне просто надо понять как это сделать. Заранее спасибо.
Возможно даже есть теория насчет этого, если есть, то, пожалуйста, скиньте.
Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы массива, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, вывода на экран элемента массива по заданному индексу и всего массива. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
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");
}
#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");
}
Иван Астафьев
что у вас значит U?
ну а как обращаются к некоторым функциям, изначально классовым, без создания экземпляра явного? В ооп есть дерективы у объявления методов класса, которые отвечаю, когда и как их можно вызывать для с++.
У класса запросто может быть статичный метод, принимающий в качестве 2 параметров 2 переменные типа вашего класса и возвращающий результат такого-же типа.
И кроме того в задании нигде не сказано, что параметра должно быть 2 и метод не обязательно статичный, он запросто может принимать 1 параметр на вход типа этого же класса, с контролем входа, прибавляя переданное. к соответствующему полю текущего экземпляра класса изменяя значение своего поля.
У класса запросто может быть статичный метод, принимающий в качестве 2 параметров 2 переменные типа вашего класса и возвращающий результат такого-же типа.
И кроме того в задании нигде не сказано, что параметра должно быть 2 и метод не обязательно статичный, он запросто может принимать 1 параметр на вход типа этого же класса, с контролем входа, прибавляя переданное. к соответствующему полю текущего экземпляра класса изменяя значение своего поля.
Похожие вопросы
- Передача в метод класса указателя на функцию C++
- В QtCreator для Qt 4.8 (и 5 может также), у класса формы главной, функция конструктор, делает не понятное наследование?
- Програмирование с++,классы, дружественная функция
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
- Помогите пожалуйста построить таблицу значений функции y = f(x) для x ∈ [a, b] с шагом h (с помощью условного оператора)
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Логический оператор И и ИЛИ в Си
- Операторы преобразования типов в C++
- Не могу разобраться. Функция удаления отрицательных элементов вектора
- Как в функции распечатать двумерный динамический массив в Си