IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Перегрузка операций. Классы., С++
klem4
сообщение 26.03.2006 15:24
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Как мне при следующем описании класса перегрузить операции сравнения для 2-х переменных типа T


template <class T>
	class Vector{
public :
		void GetMem(int); // выделение памяти
		void Input(); // обычный ввод
		void Input(const T*); // передача массива - константы
		void Input(int); // заполнение случайными числами
		void Print(); // печать массива
		void Sort(); // сортировка
		int Search(T value); // поиск
	
private :
		T * V; // сам массив
		int size;
	};




--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 29.03.2006 17:48
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


В общем сделал я каждый элемента массива аналогично тому как было в файлах препода, чтобы не приставал, и получилось у меня следующее. Хотел бы услашать какие- либо замечания/поправки, так как с классами/шаблонами познакомился совсем недавно и опыта немного.


И так шаблон класса для работы с одномерным массивом

Имеются функции
- Ввод с клавиатуры
- Заполнение случайными сислами
- Передача массива - константы
- Сортировка (методом вставок)
- Линейный поиск

И класс Timer для замера времени. Конечно чтобы такими методами замерить время приходится выполнять процедуру много раз.

#include <iostream.h>
#include <string.h>

/********************** Class Timer **************************/
class Timer {
public :
	void On();
	void Off();
	void Show();
private:
	int start, end; 
};

void Timer :: On(){
	start = time(NULL);
};

void Timer :: Off(){
	end = time(NULL);
};

void Timer :: Show(){
	cout << "time = " << difftime(end, start) << " sec." << endl;
};

/************************* Class Element ********************************/

template <class T>
	struct Element{
		T Key;
		int Data;
		
		int operator > (Element & b);
		int operator < (Element & b);
		int operator >= (Element & b);
		int operator <= (Element & b);
		T& operator [] (long i);
	};

template <class T>
	int Element <T> :: operator > (Element<T> & b){
		return Key > b.Key;
	};
	
template <class T>
	int Element <T> :: operator < (Element<T> & b){
		return Key < b.Key;
	};
	
template <class T>
	int Element <T> :: operator >= (Element<T> & b){
		return Key >= b.Key;
	};
	
template <class T>
	int Element<T> :: operator <= (Element<T> & b){
		return Key <= b.Key;
	};
	
int Element<char*> :: operator > (Element<char*> & b){
	return strcmp(Key, b.Key) > 0;
}

int Element<char*> :: operator < (Element<char*> & b){
	return strcmp(Key, b.Key) < 0;
};

int Element<char*> :: operator >= (Element<char*> & b){
	return strcmp(Key, b.Key) >= 0;
};

int Element<char*> :: operator <= (Element<char*> & b){
	return strcmp(Key, b.Key) <= 0;
};

/********************* Class Vector ************************/

template <class T>
	class Vector{
	public :
		void GetMem(long); // выделение памяти
		void Input(); // обчный ввод с клавы
		void Input(long); // заполнение случайными числами (от 0 до значения входногопараметра)
		void Print(); // печать ключей массива
		long LSearch(T value); // линейный поиск, возвращает номер элемента или -1 если не найден
		void ISort(); // сортировка вставками
	private :
		Element <T> * V; 
		long size; 
	};
	
template <class T>
	void Vector <T> :: GetMem(long n){
		size = n;
		V = new Element <T> [size];
	};
	
void Vector <char*> :: GetMem(long n){
	size = n;
	V = new Element<char*> [size];
	for (long i = 0; i < size; i++) V[i].Key = new char [size];
};
	
template <class T>
	void Vector <T> :: Input(){
		for (long i = 0; i < size; i++){
			cout << "V[" << i << "]=";
			cin  >> V[i].Key;
		};
	};
	
template <class T>
	void Vector<T> :: Input(long rnd){
		srand(time(NULL));
		for (long i = 0; i < size; V[i++].Key = rand() % rnd);
	};
	
template <class T>
	void Vector <T> :: Print(){
		long i = 0;
		while (i < size) cout << V[i++].Key << endl;
	};
	
template <class T>
	long Vector <T> :: LSearch(T value){
		long i = 0;
		while ((i < size) && !(V[i++].Key == value));
		return i < size ? --i : -1;
	};
	
template <class T>
	void Vector <T> :: ISort() {
		long a,b;
		for (a = 1; a < size; a++) {
			Element<T> temp = V[a];
			for (b = a - 1; (b >= 0) && (temp.Key < V[b].Key); b--)
				V[b+1] = V[b];
			V[b+1] = temp;
		};
	};
	
Timer TIMER;


int main(void){
	
	Vector <int> a;
	
	long N = 100;
	a.GetMem(N);
	a.Input(100); // в данном случае заполнение массива сл. числами
	
	TIMER.On();
	long find = 0;
	for (long i = 0; i < 10000; i++) find = a.LSearch(3); // поиск и замер времени
	TIMER.Off();
	
	cout << "find = " << find << endl;
	
	cout << "\nBefore Sort : " << endl;
	a.Print();

	a.ISort(); // сортировка
	
	cout << "\nAfter sort : " << endl;
	a.Print();
	
	cout << "Search time : "; TIMER.Show();

	return 0;
}





Извините ввод с помощью константы я забыл сделать smile.gif) Добавлю.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 27.07.2025 5:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"