Предыдущий пост -
Следующий пост -

Завершение класса Ptr_to_T.

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

Завершите класс Ptr_to_T из параграфа 11.11 в виде шаблона, который использует исключения для сигнализации об ошибках времени выполнения.

Что ж друзья разобрал я этот шаблон сделал и проверил для типов string

Вот код самой программы файл Ptr_to_T.h:

//ob69vlenie klacca Ptr_to_t
#ifndef PTR_TO_T_H
#define PTR_TO_T_H

template<class T>
class Ptr_to_T
{
	T* p;//ykazatel6 na tekychii element
	T* array;//ykazatel6 na macciv
	int size;//razmer macciva
	
public:
	class Run_time_error {};
	//konctryktor preobrazovani9
	Ptr_to_T(T*p, T* v, int s);//priv9zka k maccivy v razmera s; nach. znachenie p
	
	//xz zachem on nyjen
	Ptr_to_T(T* a);//priv9zka k ob6ekty; nachal6noe znachenie p
	
	//деструктор
	~Ptr_to_T();//удаление ресурсов
	
	Ptr_to_T& operator++();//prefikcnui
	Ptr_to_T operator++(int);//poctfikcnui
	
	Ptr_to_T& operator--();//prefikcnui
	Ptr_to_T operator--(int);//poctfikcnui
	
	//razumenovanie
	T& operator* ();//prefikcna9 operaci9
};

#endif

 

Файл Ptr_to_T.cpp:

//opredelenie Ptr_to_T

#include "Ptr_to_T.h"

//konctryktor preobrazovani9
template<class T>
Ptr_to_T<T>::Ptr_to_T(T*p, T* v, int s)//priv9zka k maccivy v razmera s; nach. znachenie p
:p(p),array(v),size(s){}

//konctrykotr preobrazovani9 xz zachem on nyjen
template<class T>
Ptr_to_T<T>::Ptr_to_T(T* a)//priv9zka k ob6ekty; nachal6noe znachenie p
:p(a){}

//деструктор
template<class T>
Ptr_to_T<T>::~Ptr_to_T()//удаление ресурсов
{

}

template<class T>
Ptr_to_T<T>& Ptr_to_T<T>::operator++()//prefikcnui
{
	++p;
	return *this;
}

template<class T>
Ptr_to_T<T> Ptr_to_T<T>::operator++(int)//poctfikcnui
{
	return p++;
}

template<class T>
Ptr_to_T<T>& Ptr_to_T<T>::operator--()//prefikcnui
{
	p--;
	return *this;
}

template<class T>
Ptr_to_T<T> Ptr_to_T<T>::operator--(int)//poctfikcnui
{
	cout <<*p<<endl;
	Ptr_to_T b(p--,array,size);
	cout <<*p<<endl;
	return b;
}

//razumenovanie
template<class T>
T& Ptr_to_T<T>::operator* ()//prefikcna9 operaci9
{
	int flag=0;
	for(int i=0;i<size;i++)
	{
		if(&array[i]==p)
		{
			flag=1;
		}
	}
	
	if(flag==0)
		throw Run_time_error();

	return *p;
}

 

и файл main.cpp:

//klacc Ptr_to_T v vide wablona
#include <iostream>
using std::cout;
using std::endl;
#include <cstdlib>
using std::exit;
#include <string>
using std::string;

#include "Ptr_to_T.cpp"

void f3(int a)
{
	int v[200]={0};
	Ptr_to_T<int> p(&v[0],v,200);
	
	p.operator--(0);
	p.operator*()=a;//owibka vremeni vupolneni9 (run-time error): p vne diapazona
	//exit(1);
	p.operator++();
	p.operator*()=a;//ok
	cout <<"end"<<endl;
}

int main()
{
	/*int v[200];
	for(int i=0;i<200;i++)
		v[i]=i;*/
	
	string v[4];
	v[0]="Hellow";
	v[1]="world";
	v[2]="gacpada";
	v[3]="dadada";
	
	Ptr_to_T<string> p(&v[0],v,4);//inicializaci9 ykazatel9 p
	
	cout <<*p<<endl;
	p++;
	cout <<*p<<endl;
	/*p++;
	cout <<*p<<' '<<*p<<endl;
	++p;
	
	cout <<"*p= "<<*p<<" *(++p)= "<<*(++p)<<endl;
	
	//f3(5);*/
	
	
	return 0;
}

И все. Работает как для int так и для string. Исключения также генерируется, но не обрабатывается, просто нужно создать try блок и обработчик для данного типа исключений, в данном случае у нас тип исключений Run_time_error .

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

rss