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

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

Восстановить пароль Регистрация
 
Studentochka123
Сообщений: n/a
25.11.2013, 23:12     Разработка класса вектор #1
Помогите пожалуйста с заданием

цель:
Разработать класс вектор для хранения целых чисел с проверкой правильности обращения по индексу и встроенными операциями сложения и вычитания векторов, умножения на скаляр, скалярного произведения.
Задание:
Определить класс для хранения целых чисел с проверкой правильности обращения по индексу и встроенными операциями сложения и вычитания векторов, умножения на скалаяр, скалярного произведения. Написать функцию 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);
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 23:12     Разработка класса вектор
Посмотрите здесь:

Наследование класса Вектор C++
C++ Насчет класса вектор
Шаблон класса вектор C++
C++ шаблон класса вектор
вектор элементов класса C++
шаблон класса вектор C++
шаблон класса вектор C++
Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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