Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2015, 16:16   #1
FrostBelarus
Пользователь
 
Регистрация: 10.11.2014
Сообщений: 23
По умолчанию Шаблон функции,работа с классом(с++)

Доброго дня
Есть задача: написать шаблон функции, выполняющую сортировку методом подсчета. Для проверки отправить в функцию int,double и пользовательский класс(для манипуляций выберите одно из полей класса).
Функция работает с int и double, но с классом есть проблемы. И появилось два вопроса:
1) Есть класс для работы с массивами. Можно ли отправить в функцию объект этого класса? Я попытался сделать, но на этапе сборки пишет ошибку "error C2106: =: левый операнд должен быть левосторонним значением d:\учеба\2 курс\oop\lr7-8\consoleapplication1\consoleapplic ation1\templatesort.h 19 1 ConsoleApplication1"
2) Или по условию корректнее создать класс, в котором одним из полей является массив? Если да,как в таком случае отправить в функцию этот массив?
Array.h
Код:
#pragma once
int i = 0,j=0;
template <typename t>
class Array
{
private:
	t *ptr;
	int size;
public:
	Array()
	{
		size = 5;
		ptr = new t[size];
		for (int i = 0; i < size; i++)
		{
			ptr[i] = 0;
		}
	};
	Array(int arrSize)
	{
		if (arrSize > 0)
		{
			size = arrSize;
		}
		else
		{
			size = 10;
		}
		ptr = new t[size];
		for (int i = 0; i < size; i++)
		{
			ptr[i] = 0;
		}
	};
	int getSize()
	{
		return size;
	};
	void Get()
	{
		for (int i = 0; i < size; i++)
		{
			cout << ptr[i] << " ";
		}
		cout << endl;
	};
	t getPtr()
	{
		return *ptr;
	}
	void Set()
	{
		for (int i = 0; i < size; i++)
		{
			cin >> ptr[i];
		}
	};
	t operator [](int index)
	{
		if (index < 0 || index >= size)
		{
			cout << "Error index" << endl;
			return -1;
		}
		return ptr[index];
	};
	bool operator < (t key)
	{
		for (int i = 0; i < size; i++)
		{
			if (ptr[i] == key)
			{
				cout << "True" << endl;
				return true;
			}
		}
		return false;
	};
	bool operator >(Array &oldArr)
	{
		for (i; i < size; i++)
		{
			for (j; i < oldArr.size; j++)
			{
				if (oldArr.ptr[i] > oldArr.ptr[j])
				{
					return true;
				}
				else
				{
					return false;
				}
			}
		}
	};
	bool operator !=(const Array &rgt)
	{
		if (size != rgt.size)
		{
			cout << "different size" << endl;
			return true;
		}
		for (int i = 0; i < size; i++)
		{
			if (ptr[i] != rgt.ptr[i])
			{
				cout << "different " << i + 1 << " element" << endl;
				return true;
			}
		}
		cout << "same" << endl;
		return false;
	};
	bool operator =(Array &oldArr)
	{
		cout << "Go!" << endl;
	};
	Array operator +(Array &ar)
	{
		Array newAr(size + ar.size);
		int i = 0, y = 0;
		for (i; i < size; i++)
		{
			newAr.ptr[i] = ptr[i];
		}
		for (i, y; i < size + ar.size, y<ar.size; i++, y++)
		{
			newAr.ptr[i] = ar.ptr[y];
		}
		return newAr;
	};
};
Templatesort.h
Код:
#pragma once
#include"stdafx.h"
#include"array.h"
template<class type> void Sort(type oldArr,type sortArr, int size)
{
	int k;
	for (int i = 0; i < size; i++)
	{
		k = 0;
		for (int j = 0; j < size; j++)
		{
			if (oldArr[i]>oldArr[j])
			{
				k++;
			}
		}
		sortArr[k] = oldArr[i];
	}
}
ConsoleApplication1.cpp
Код:
#include "stdafx.h"
#include <iostream>
#include "array.h"
#include "TemplateSort.h"
using namespace std;
const int sz = 5;
int _tmain(int argc, _TCHAR* argv[])
{
int size = 0;
	cout << "Enter size of Array: ";
	cin >> size;
	int *oldArr = new int [size];
	int *sortArr = new int[size];
	cout << "Enter Array(size " << size << " ): " << endl;
	for (int i = 0; i < size; i++)
	{
		cin >> oldArr[i];
	}
	Sort(oldArr, sortArr, size);
	cout << "Sort Array: " << endl;
	for (int i = 0; i < size; i++)
	{
		cout << " " << sortArr[i] << " ";
	}
	cout << endl;
	double *oldArr1 = new double[size];
	double *sortArr1 = new double[size];
	cout << "Enter Array(size " << size << " ): " << endl;
	for (int i = 0; i < size; i++)
	{
		cin >> oldArr1[i];
	}
	Sort(oldArr1, sortArr1, size);
	cout << "Sort Array: " << endl;
	for (int i = 0; i < size; i++)
	{
		cout << " " << sortArr1[i] << " ";
	}
	cout << endl;
	Array<int> oldArr2;
	Array<int> sortArr2;
	cout << "Enter Array(size " << size << " ): " << endl;
	oldArr2.Set();
	Sort(oldArr2, sortArr2, size);
	cout << "Sort Array: " << endl;
	for (int i = 0; i < size; i++)
	{
		sortArr2.Get();
	}
	cout << endl;
	return 0;
}
FrostBelarus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с классом Анна_25 Общие вопросы C/C++ 1 23.02.2014 12:10
Работа с Классом Исключений pinkiller Общие вопросы C/C++ 0 12.12.2011 13:11
Работа с классом UnChanter Помощь студентам 2 14.03.2010 20:23
Работа с классом| C++ Konicy Общие вопросы C/C++ 15 21.12.2009 19:08
C++ работа с классом VadEr Помощь студентам 2 17.05.2009 12:33