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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ с++ пересечение прямой с сеткой http://www.cyberforum.ru/cpp-beginners/thread1019051.html
с++ Здравствуйте, не могли бы вы помочь с программным кодом на с++ В данной программе необходимо разбить сетку любого размера (к примеру ) с любым шагом(пример 0.001) и найти точки пересечения...
C++ скоро экзамен:( Очень надо коды по заданиям:( 1) В матрице з действительных чисел поменять местами последний столбик со столбиком, который имеет самый большой за абсолютною величиною елемент матрицы. одна... http://www.cyberforum.ru/cpp-beginners/thread1019036.html
Создать класс колесо, имеющий радиус C++
Создать класс колесо, имеющий радиус. Определить конструкторы и методы доступа. Создать класс автомобиль, имеющий колеса и строку обозначающую фирму-производителя. Создать производный класс грузовой...
C++ Создать иерархию классов игра – спортивная игра – волейбол
Создать иерархию классов игра – спортивная игра – волейбол. Определить конструкторы, деструктор, оператор присваивания и другие необходимые функции. Продемонстрировать работу классов.
C++ Объяснение программы http://www.cyberforum.ru/cpp-beginners/thread1019020.html
В програмировании я практически нечего не понимаю... Но курсовую писать нужно, я нашол программу в Инете ,но объяснить её не могу, помогите с объяснениями пожалуйста. (и если там как то можно...
C++ Классы. Одиночное наследование Помогите 2 задачки написать пожалуйста а) Создать иерархию классов здание, административное здание и жилое здание. Определить конструктор копирования, оператор присваивания через соответствующие... подробнее

Показать сообщение отдельно
Studentochka123
Сообщений: n/a

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

25.11.2013, 23:12. Просмотров 407. Ответов 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);
}
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru