Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Studentochka123
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 1
#1

Разработка класса вектор - C++

25.11.2013, 23:12. Просмотров 422. Ответов 0
Метки нет (Все метки)

Помогите пожалуйста с заданием

цель:
Разработать класс вектор для хранения целых чисел с проверкой правильности обращения по индексу и встроенными операциями сложения и вычитания векторов, умножения на скаляр, скалярного произведения.
Задание:
Определить класс для хранения целых чисел с проверкой правильности обращения по индексу и встроенными операциями сложения и вычитания векторов, умножения на скалаяр, скалярного произведения. Написать функцию MAIN() и проиллюстрировать в ней все определенные операции с объектами класса.

Добавлено через 9 минут
Пример конструирования класса
Для хранения данных потребуется некоторая область памяти, начало которой мы определим как указатель на целое (int* ia;), а размер ее будем хранить в целом числе (int size;). Тогда определение класса может выглядеть следующим образом:
const int IntArraySize = 24;
class IntArray{
public:
IntArray(int sz = IntArraySize);
IntArray(const IntArray&);
~IntArray(){ delete [] ia;};
IntArray& operator=(const IntArray&);
int& operator[](int);
int getSize() const { return size;};
protected:
int size;
int* ia;
};
Определенная в строке “const int IntArraySize = 24;” константа используется при конструировании объекта типа IntArraySize с размером по умолчанию: IntArraySize ia; //здесь объект ia будет создан с size = 24
IntArraySize ia1(40); //здесь объект ia1 будет создан с size = 40 .
Конструктор класса может иметь cледующий вид:
IntArray ::IntArray(int sz) {
size = sz;
ia = new int[size];
}
Конструктор копирования класса X::X(const X&) предназначен для конструирования объекта следующим образом:
IntArraySize ia2 = ia1;
Объект ia2 будет создан в виде точной копии объекта ia1, при отсутствии же конструктора копирования будет выполнена почленная инициализация ia2 данными ia1, то есть ia2.size = ia1.size; ia2.ia =ia1.ia; последнее представляет потенциальную опасность. Время существования объектов ai1 и ia2 может быть разным, если ia1 прекращает существование деструктор освобождает память на которую продолжает указывать указатель ia2.ia, поскольку он был инициализирован указателем ia1.ia при почленном копировании.
Таким образом конструктор копирования должен создать новый объект являющийся точной копией объекта которым осуществляется инициализация:
IntArray ::IntArray(const IntArray& IA) {
size = IA.size;
ia = new int[size];
for(int i = 0; i < size; I++)
{
ia[i] = IA.ia[i];
}
}
Поскольку размер копируемого объекта не обязан совпадать с прежним размером, необходимо освободить память, выделить ее заново для копируемого объекта и перенести данные.
Перегрузка операции “равно” будет использована в случае:
ia = ia1;
Для того чтобы реализовать такую возможность необходимо определить перегрузку операции “равно”:
IntArray& IntArray::operator =(const IntArray& iA){
delete [] ia;
size = iA.size;
ia = new int[size];
for(int i = 0; i < size; i++)
{
ia[i] = iA.ia[i];
}
return *this;
}
Определение операции []может выглядеть следующим образом:
int& IntArray::operator[](int index){
return ia[index];
}
В производном от IntArray классе, вероятно потребуется переопределение этой операции таким образом чтобы исключить обращение по неверному индексу.
Для создания нового объекта типа IntArray с одновременной инициализацией с помощью предопределенного массива целых, например таким образом:
int arr[] = {1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,0};
IntArray arr1(arr,19);
потребуется определение еще одного конструктора IntArray(int*,int);.
IntArray::IntArray( int *arr, int sz) {
size = sz;
ia = new int[size];
for(int i = 0; i < size; i++) {
ia[i] = arr[i];
}
}
Используя построенный класс создадим производный от него класс снабдив его дополнительными свойствами.
class IntArrayRC : public IntArray {
public:
IntArrayRC(int = ArraySize);
int& operator [](int);
protected:
void RangeCheck(int);
};
Переопределим операцию [] для обеспечения проверки выхода индекса за границы массива. Реализация операции может выглядеть следующим образом:
int& IntArrayRC :: operator[](int index){
RangeCheck(index);
return ia[index];
}
Функция член класса RangeCheck(int), для проверки правильности доступа по индексу, может быть реализована следующим образом:
#include <stdlib.h>
void IntArrayRC::RangeCheck(int index) {
if(index <= 0 || index >=size){
cerr <<"Неверный индекс!\n";
exit(1);
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 23:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разработка класса вектор (C++):

Разработка класса, содержающего структуры и массивы типа вектор - C++
Доброе время суток! Стал разбираться с классами и столкнулся с некоторыми сложностями: Чисто тестовый код (не претендует на...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

шаблон класса вектор - C++
На экзамене будет задание: создать шаблонный класс вектор с возможностью вывода информации,помещения информации и обработки информации ....

Переопределение класса вектор - C++
Переопределите класс Vector, описывающий вектор в пространстве: а) двухместную операцию сложения векторов (+), возвращающую свой...

Шаблон класса вектор - C++
template &lt;class T&gt; class Vector { public: //? int size; T* data; public: Vector(int); int Size(); T&amp; operator...

Вектор объектов класса - C++
Всем привет! Несколько недель назад я писал сюда по поводу одной задачи. Она заключается в том, чтобы реализовать класс &quot;Зоомагазин&quot; с...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 23:12
Привет! Вот еще темы с ответами:

Насчет класса вектор - C++
Помогите в состовлении: создать класс вектор. Члены данные класса - 3 прямоугольные декартовые координаты. Члены функции класса...

шаблон класса вектор - C++
Программа написана в qt при компиляции выдает ошибки - помогите разобраться. Вроде все написано правильно. template &lt;class T, int Size&gt;...

Вектор из объектов класса - C++
Добрый вечер) Подскажите пж, что не так? Вот код программы: В файле class.h: #ifndef CLASS_H_INCLUDED #define...

Реализация класса и вектор - C++
Всем привет! test.cpp(главный файл) /* * @pay - зарплата сотрудника * @countEl - позиция элемента в контейнере */ #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.