Илья Петров
Знаток
(348)
1 неделю назад
#include <iostream>
// Общий шаблон класса для динамических массивов
template<typename T>
class DynamicArray {
private:
T * data; // Указатель на данные массива
int size; // Размер массива
public:
// Конструктор по умолчанию
DynamicArray() : data(nullptr), size(0) {}
// Конструктор с инициализацией размера массива
DynamicArray(int n) : data(new T[n]), size(n) {}
// Деструктор для освобождения памяти
~DynamicArray() {
delete[] data;
}
// Метод для просмотра значений массива
void print() const {
for (int i = 0; i < size; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}
// Метод для формирования нового массива
void formNewArray(T value) {
for (int i = 0; i < size; ++i) {
data[i] = value;
}
}
};
int main() {
// Использование шаблона класса для разных типов данных
DynamicArray<int> intArray(5); // Динамический массив целых чисел
DynamicArray<double> doubleArray(5); // Динамический массив вещественных чисел
DynamicArray<char> charArray(5); // Динамический массив символов
// Заполнение массивов и их просмотр
intArray.formNewArray(42);
intArray.print();
doubleArray.formNewArray(3.14);
doubleArray.print();
charArray.formNewArray('A');
charArray.print();
return 0;
}
Егор КулаковЗнаток (302)
1 неделю назад
С GPT и я могу, а вот свои поправки в коде не каждый может сделать... Палит нейронка, т к давно уже не пишут "std::"
ChatGPT-4 Turbo
Гуру
(3260)
1 неделю назад
Хз, правильно или нет, но это хотя б ориг ChatGPT 4 (с подпиской)
Для создания класса шаблона в C++, который может управлять динамическими массивами различных типов данных, вам необходимо использовать шаблоны (template) и параметры шаблона. Вот как может выглядеть код на C++ для описанной задачи:
#include <iostream>
using namespace std;
template<typename T>
class DynamicArray {
private:
T* array;
size_t size;
public:
// Конструктор
DynamicArray(size_t n) : size(n) {
array = new T[size];
}
// Деструктор
~DynamicArray() {
delete[] array;
}
// Метод просмотра значений массива
void Display() const {
for(size_t i = 0; i < size; ++i) {
cout << array[i] << " ";
}
cout << endl;
}
// Метод для заполнения массива значениями (a_i * a_i)
void FillWithMultiplication(const T& a) {
for(size_t i = 0; i < size; ++i) {
array[i] = a * (i + 1); // Пример расчёта, можно изменить под нужную задачу.
}
}
// Геттер для размера массива
size_t GetSize() const {
return size;
}
// Доступ к элементам массива
T& operator[] (size_t index) {
if (index >= size) throw out_of_range("Index out of range");
return array[index];
}
// Константный доступ к элементам массива
const T& operator[] (size_t index) const {
if (index >= size) throw out_of_range("Index out of range");
return array[index];
}
};
int main() {
// Создание инстанции класса шаблона для целочисленного массива
DynamicArray<int> intArray(5);
intArray.FillWithMultiplication(2);
intArray.Display();
// Создание инстанции класса шаблона для вещественного массива
DynamicArray<double> doubleArray(5);
doubleArray.FillWithMultiplication(2.5);
doubleArray.Display();
return 0;
}
Обратите внимание, что у вас просили создать метод для решения конкретной задачи формирования нового массива по правилу (a_1×a_1), (a_1×a_2), ... , (a_1×a_n), но детали этого не указаны, так что в методе FillWithMultiplication я заполнил массив в соответствии с предположением, что данное a умножается на индекс каждого элемента (начиная с 1).
Если ваши требования отличаются, вам потребуется соответствующим образом изменить логику методов.
Создать шаблон класса, порождающего динамические одномерные
массивы с элементами различных типов (вещественњые, целочисленные,
символьные и т.д)
Тип, данных результат ЯЯЛЯЮТСЯ параметрами по отношению к классу.
Программа должна содержать: конструктор, деструкгор, метод просмотра
значений созданното массива, а также метод для решения задач формирования
нового массива. На C++