Вектор в стиле контейнера.

Рубрика: C++, Дата: 10 May, 2013, Автор:

Напишите класс, производный от Container так, чтобы Vector из параграфа 16.2.1 мог использоваться в стиле контейнера из параграфа 16.2.2

Так вообщем тут все запутано и я ничо не понял что же нам нужно написать все таки. Так написать нам нужно все таки класс производный от Container. Уже более менее ясно. Как же его написать? А так чтобы Vector из параграфа 16.2.1 мог использоваться в стиле контейнера из параграфа 16.2.2. Отут уже загвоздочка. Ничерта мне не ясно.

Условие задачки как оказалось запутанное и мне пришлось обратиться за помощью и там мне подсказали просто Vector унаследовать от Container, что я щас и сделаю.

Вот код который у меня получился:

//cozdaem klacc proizvodnui ot Container.
#include <iostream>
using std::cout;
using std::endl;

struct Object
{
	Object* pre;
	Object* next;
	//...
public:
	//konctryktor po ymolchaniyu
	Object():pre(0),next(0){}

	//virtual6nui dectryktor
	virtual ~Object(){};
};

//cam klacc kontainer
class Container : public Object
{
public:
	struct Bad_op//klacc icklyuchenii
	{
		const char* p;
		Bad_op(const char* pp):p(pp){}
	};
	
	virtual void put(Object*){throw Bad_op("put");}
	virtual Object* get() {throw Bad_op("get");}
	virtual Object*& operator[](int){throw Bad_op("[]");}
	
	//...
};

class Ship : public Container
{
public:
	int data;
	//konctryktor po ymolchaniyu
	Ship():data(0){}
	//konctryktor preobrazovani9
	Ship(int a):data(a){}
};

//Vector iz 16.2.1
template<class T>
class Vector : public Container//optimal6nui
{
public:
	T mass[30];
	int size;
	explicit Vector(size_t n):size(n){}//inicializaci9 n ob6ektami co znacheniem T()

	T& operator[](size_t n)//indekcaci9
	{
		if(n<=size&&n>=0)
			return mass[n];
	}
	
	T getSize(){return size;}
	//...
};

int main()
{
	cout <<"Klacc proizvodnui ot Container"<<endl;
	Ship a(1);
	Ship b(2);
	Ship c(3);
	
	Vector<Ship> vec(3);
	vec[0]=a;
	vec[1]=b;
	vec[2]=c;

	cout <<"vec[0].data= "<<vec[0].data<<endl;
	cout <<"vec[1].data= "<<vec[1].data<<endl;
	cout <<"vec[2].data= "<<vec[2].data<<endl;

	return 0;
}

Просто сделали наследование и просто создали вектор ток который нам нужен.

[youtube]http://www.youtube.com/watch?v=zrM7wTd8r34[/youtube]

rss