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

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

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

Восстановить пароль

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

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

Доброго дня, форумчане.
Задача: написать шаблон функции,выполняющей сортировку массива методом подсчета.Для элементов типа int,double все работает. Но если использовать в качестве типа класс, то возникают проблемы. Пробовал несколько вариантов,получая разные ошибки( то функция не сортирует элементы типа "Класс", то не видит перегруженный оператор "="). Как лучше реализовать функцию?
P.S. В классе в качестве параметра сортировки используется поле "age".
UserClass.h
Код:
#include"stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class Person
{
private:
    string name;
    int age;
public:
    Person();
    Person(string n, int a);
    Person(const Person&p);
    friend ostream& operator<<(ostream& os, Person& ps);
    void show();
    string getName();
    int getAge();
    void setName(string tmp);
    void setAge(int tmp);
    friend bool operator>(const Person &tmp,const Person &tmp1);
    Person &operator =(Person &tmp1);
};
UserClass.cpp
Код:
#include"stdafx.h"
#include"UserClass.h"
#include<iostream>
#include<string>
using namespace std;
Person::Person()
{
    name = "";
    age = 0;
};
Person::Person(string n, int a)
{
    name = n;
    age = a;
};
Person::Person(const Person &p)
{
    name = p.name;
    age = p.age;
}
std::string Person::getName()
{
    return name;
};
int Person::getAge()
{
    return age;
}
void Person::show()
{
    std::cout<<" "<< getName()  << " " << getAge();
};
void Person::setName(string tmpname)
{
    name = tmpname;
}
void Person::setAge(int tmpage)
{
    age = tmpage;
}
bool operator>(const Person &tmp,const Person &tmp1)
{
    if (tmp.age > tmp1.age)
    {
        return true;
    }
    else
    {
        return false;
    }
}
Person &Person::operator=(Person &tmp1)
{
    name = tmp1.name;
    age = tmp1.age;
    return *this;
}
ostream& operator<<(ostream& os, Person& ps)
{
    ps.show();
    return os;
};
;
array.h
Код:
#include"stdafx.h"
template <class t> class Array
{
private:
    t *ptr;
    int size;
public:
    Array();
    Array(int,t);
    Array(const Array &tmp);
    t operator[](int);
    void operator=(t &tmp);
    int getSize();
    void Get();
    void Set(t);
};
template<class t>
Array<t>::Array()
{
        ptr = NULL;
        size = 0;;
}
template<class t>
Array<t>::Array(int arrSize, t a)
{
    size = arrSize;
    ptr = new t[arrSize];
    for (int i = 0; i < arrSize; i++)
    {
        ptr[i] = a;
    }
}
template<class t>
Array<t>::Array(const Array&tmp)
{
    ptr = new t[tmp.size];
    size = tmp.size;
    for (int i = 0; i < size; i++)
    {
        ptr[i] = tmp.ptr[i];
    }
}
template <class t>
int Array<t>::getSize()
{
    return size;
}
template<class t>
void Array<t>::operator=(t &tmp)
{
    size = tmp.size;
    for (int i = 0; i < size; i++)
    {
        ptr[i] = tmp.ptr[i];
    }
}
template <class t>
t Array<t>::operator[](int i)
{
    return ptr[i];
}
template <class t>
void Array<t>::Get()
{
    for (int i = 0; i < size; i++)
    {
        std::cout << ptr[i];
    }
    cout << endl;
}
template <class t>
void Array<t>::Set(t tmp)
{
    if (ptr == NULL)
    {
        size = 1;
        ptr = new t[size];
        ptr[0] = tmp;
        return;
    }
    t*a = new t[size];
    for (int i = 0; i < size; i++)
    {
        a[i] = ptr[i];
    }
    delete[]ptr;
    ptr = new t[++size];
    for (int i = 0; i < size - 1; i++)
    {
        ptr[i] = a[i];
    }
    delete[]a;
    ptr[size - 1] = tmp;
}
template<class r>
void Sort(r oldArr, r 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];
        }
    }
FrostBelarus вне форума Ответить с цитированием
Старый 30.11.2015, 00:35   #2
FrostBelarus
Пользователь
 
Регистрация: 10.11.2014
Сообщений: 23
По умолчанию

ConsoleApplication.cpp
Код:
#include "stdafx.h"
#include <iostream>
#include "array.h"
#include "UserClass.h"
#include <string>
using namespace std;
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 << " ,int): " << 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 << " ,double): " << 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<Person>oldArr2;
    Array<Person>&sortArr2=oldArr2;
    oldArr2.Set(Person("Sidor", 7));
    oldArr2.Set(Person("Viktor", 10));
    oldArr2.Set(Person("Nikolay", 3));
    Sort(oldArr2, sortArr2 , 3);
    cout << "Sort Array: " << endl;
    for (int i = 0; i < 3; i++)
    {
        cout << " " << sortArr2[i] << " ";
    }
    cout << endl;
    return 0;
}
FrostBelarus вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблон функции,работа с классом(с++) FrostBelarus Помощь студентам 0 16.11.2015 16:16
нужно int поменять на double Denis_Mishin C# (си шарп) 3 19.03.2015 16:23
int mass to double Alex_sim Общие вопросы .NET 9 08.05.2010 16:25
округливание в C#( double to int) Natok Помощь студентам 1 25.05.2009 22:58
преобразование int в double Си++ t1empo Помощь студентам 11 27.04.2009 19:31