C++ класс вектор

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
tanyabars
Сообщения: 9
Зарегистрирован: 17 апр 2010, 19:51

Для созданного объекта а, разработанного класса – вектор (одномерный массив), реализовать перегрузку операции –> ( а -> ). Содержимое объекта (а, его вектора ), до и после выполнения операции, вывести на экран.

Код: Выделить всё

#include <iostream.>
#include <vector>
using namespace std;

//template <class T,int size=60>

class Vector
{
private:
int *data;
int length;
public:
Vector(int);
~Vector();
Vector *operator->();
};

Vector::Vector ()
{
length=size;
data=new T[size];
}

Vector::~Vector()
{
delete [] data;
}

Vector Vector::*operator ->(int i)
{
return data;
}

int main()
{
Vector<float,10>rf;
Vector<int,10>ri;
for(int i=0;i<10;i++)
{
rf[i]=i;
ri[i]=i*i;
}
for(i=o;i<8;i++)
{
cout<<rf[i]<<ri[i];
}
return 0; 
проверьте пожалуйста
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Послушай, ты можешь нормально сказать, что от нас хочешь? Из просьбы "проверьте пожалуйста" совсем непонятно, что требуется сделать и что не получается сделать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Для начала подключи директиву iostream нормально :) ))
Либо <iostream.h> либо <iostream>.
Ну и как уже Romeo сказал, сформулируй суть проблемы :)
tanyabars
Сообщения: 9
Зарегистрирован: 17 апр 2010, 19:51

как правильно разработать класс вектор?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Правильно использовать стандартный STL-евский. Либо, смотреть его код, чтобы понять, как правильно он должен быть реализован.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
tanyabars
Сообщения: 9
Зарегистрирован: 17 апр 2010, 19:51

По заданию необходимо реализовать перегрузку операции -> для одномерного массива.
Выдает ошибку( left of '->data' must point to class/struct/union) пожалуйста помогите исправить.

Код: Выделить всё

#include <iostream>
#include <vector>
using namespace std;

template <class T,int size=4>class Array
{
private:
	T *data;  
	int length;
public:
	Array();
	~Array();  
	void InArray(); 
	void OutArray(); 
	T *operator ->() {return data;}
};

template <class T>
Array<T>::Array()
{
	length=size;
	data=new T[size];
}

template <class T>
Array<T>::~Array()
{
	delete []data;
}
template <class T>
void Array<T>::InArray()
{
cout << "Enter Array:" << endl;
cout << "------------" << endl;
for (int i = 0; i < 4; i++)
{
cout << i << "-element: ";
cin >> data[i];
}
cout << endl;
}
template <class T>
void Array<T>::OutArray()
{
cout << "Array: ";
for (int i = 0; i < 4; i++)
{
cout << data[i];
}
cout << endl;
}
int main()
{
Array <int>oArray_1;
oArray_1.InArray();
(oArray_1.operator ->())-> data;
oArray_1.OutArray();
return 0;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Это что за ужас?

Код: Выделить всё

(oArray_1.operator ->())-> data;
Я бы тоже ругался на месте компилятора. Оператор -> уже возвращает data. Зачем ещё раз писать data?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить