Форум программистов, компьютерный форум CyberForum.ru

Шаблоны функций - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
02.04.2011, 01:39     Шаблоны функций #1
не совсем понимаю, как работают шаблоны функций , в учебнике только дан пример и не объяснено ниче(
САма программа готовая есть, надо переделать с шаблонами но не знаю как
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include<iostream.h>
 
template<class T> T max(T *a, int m, int n);
int nuts(int **a, int m, int n);
int nuts1(int **a, int m, int n);
 
int main()
{
    int **a=NULL;
    int m, n;
    int i, h =0;
    cout<<"Vvod razmernosti"<<endl;
    cout<<"m: ";
    cin>>m;
    cout<<"n: ";
    cin>>n;
    a= new int *[m];
 
    cout<<"Vvod matricy iz "<<m;
    cout<<" strok i "<<n<<" stolbov: ";
    cout<<endl;
    for(i=0;i<m;i++)
    {
        a[i]=new int [n];
        for (int j=0; j<n; j++)
            cin>>a[i][j];
    }
    for (i=0;i<m;i++)
    {
        cout<<endl;
        for (int j=0; j<n;j++)
            cout<<a[i][j]<<"  ";
    }
    cout<<"Chislo strok bez '0' : "<<nuts(a,m,n)<<'\n';
    cout<<endl;
    cout<<"Naib. chislo: "<<nuts1(a,m,n)<<'\n';// else cout<<"Net povtorov"<<'\n';
    cout<<endl;
    delete[] a;
    return 0;
}
int nuts(int **a, int m, int n)
{
    int h;
    h=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            if(a[i][j]==0) break;
            if(j==n) h++;
    }
    return h;
}
int nuts1(int **a, int m, int n)
{
    int max=0; //bool fl=false;
    for (int i=0; i<m;i++)
        for (int j=0; j<n;j++)
            if ((/*fl && */a[i][j]>max)/* || (!fl)*/)
            {
                for (int l=0; l<m; l++)
                    for (int p=0;p<n;p++)
                        if (a[l][p]==a[i][j] && (l!=i ||p!=j))
                        {
                    //      if(!fl) fl=true;
                            max=a[i][j];
                            l=m;
                            break;
                        }
                    //  cout<<"\n";
                    //  if (fl===true) cout <<"Naib. chislo:  "<<
            }
                        return max;
            }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2011, 01:39     Шаблоны функций
Посмотрите здесь:

C++ шаблоны функций на С++
C++ Шаблоны функций
C++ Шаблоны функций c++
C++ Шаблоны функций
шаблоны функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
07.04.2011, 08:54     Шаблоны функций #21
Вынос реализации функций в отдельный файл позволяет окончательно детали этой реализации скрыть путём компиляции его отдельного от остального проекта, но заголовки функций всё равно включать во все файлы, где есть вызов этих функций, что необходимо для их использования, так как иначе вызов просто не возможен. Библиотеки функций и отдельные модули с функциями - три различные реализации такого подхода. Библиотеки считаются за две реализации, так как они бывают со статическим и динамическим связыванием. Только я не понял, при чём здесь класс.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 09:00     Шаблоны функций #22
Цитата Сообщение от taras atavin Посмотреть сообщение
но заголовки функций всё равно включать во все файлы, где есть вызов этих функций
Это требование распространяется и на не шаблонные функции.)
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
15.04.2011, 03:07  [ТС]     Шаблоны функций #23
а ккак с вызово шаблонов, или там просто от функции так и оставить?...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2011, 06:36     Шаблоны функций #24
Шаблоны вызывать нельзя. Шаблон пишется для того, чтоб по нему сгенерить несколько версий функции, а вызываюстя уже эти версии так, как если бы функция была перегружена обычным способом.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
24.04.2011, 17:38  [ТС]     Шаблоны функций #25
Первый пункт , прога тока целые элементы массива принимает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<iostream.h>
 
template <typename T1> 
T1 nuts(T1 **a, int m, int n){
 
        int h;
        h=0;
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        if(a[i][j]==0) break;
                        if(j==n) h++;
        }
        return h;
}
int main()
{
        int **a=NULL;
        int m, n;
        int i, h =0;
        cout<<"Vvod razmernosti"<<endl;
        cout<<"m: ";
        cin>>m;
        cout<<"n: ";
        cin>>n;
        a= new int *[m];
 
        cout<<"Vvod matricy iz "<<m;
        cout<<" strok i "<<n<<" stolbov: ";
        cout<<endl;
        for(i=0;i<m;i++)
        {
                a[i]=new int [n];
                for (int j=0; j<n; j++)
                        cin>>a[i][j];
        }
        for (i=0;i<m;i++)
        {
                cout<<endl;
                for (int j=0; j<n;j++)
                        cout<<a[i][j]<<"  ";
        }
        cout<<"Chislo strok bez '0' : "<<nuts(a,m,n)<<'\n';
        cout<<endl;
 
        delete[] a;
 
}
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 16:55  [ТС]     Шаблоны функций #26
ругается что тип а неизвестен

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream.h>
 
template <typename T> 
T nuts(T **a)
{
 
    T **a=NULL;
    int m, int n;
    int h;
    h=0;
    int m, n;
    int i, h =0;
    cout<<"Vvod razmernosti"<<endl;
    cout<<"m: ";
    cin>>m;
    cout<<"n: ";
    cin>>n;
    a= new T *[m];
 
    cout<<"Vvod matricy iz "<<m;
    cout<<" strok i "<<n<<" stolbov: ";
    cout<<endl;
    for(i=0;i<m;i++)
    {
        a[i]=new T [n];
        for (int j=0; j<n; j++)
            cin>>a[i][j];
    }
    for (i=0;i<m;i++)
    {
        cout<<endl;
        for (int j=0; j<n;j++)
            cout<<a[i][j]<<"  ";
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            if(a[i][j]==0) break;
            if(j==n) h++;
    }
    return h;
 
//int nuts(int);
}
 
 
//int nuts(int **a, int m, int n);
//int nuts1(int **a, int m, int n);
 
int main()
{
    //float **a=NULL;
 
    cout<<"strok s '0' : "<<nuts(a)<<'\n';
    cout<<endl;
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 16:58     Шаблоны функций #27
И я бы ругался. Ты а не объявил, а использовать пытаешься.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:17  [ТС]     Шаблоны функций #28
дак а толку... я тупой наверно)
а я вроде тоже обьявлял и ниче не происходит
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:24     Шаблоны функций #29
Строка 54. Ты передаёшь в функцию несуществующую переменную. У неё нет типа. Компилятор не может инстанцировать функцию. И обижается на тебя. Не обижай компилятор, объяви переменную.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:29  [ТС]     Шаблоны функций #30
а под каким типом тогда ее обьявить и в каком месте??
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:41     Шаблоны функций #31
Под тем типом, который тебе нужен. Объявить ДО использования.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:47  [ТС]     Шаблоны функций #32
дык я не знаю какоготипа, если по идее он в шабоне задается.....
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 18:53     Шаблоны функций #33
Нет. В шаблоне тип не задаётся.
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 18:59  [ТС]     Шаблоны функций #34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<iostream.h>
 
template <typename T> 
T nuts(T **a)
{
 
//        T **a=NULL;
   // int m, int n;
        int h;
        h=0;
        int m, n;
        int i =0;
        cout<<"Vvod razmernosti"<<endl;
        cout<<"m: ";
        cin>>m;
        cout<<"n: ";
        cin>>n;
        a= new T *[m];
 
        cout<<"Vvod matricy iz "<<m;
        cout<<" strok i "<<n<<" stolbov: ";
        cout<<endl;
        for(i=0;i<m;i++)
        {
                a[i]=new T [n];
                for (int j=0; j<n; j++)
                        cin>>a[i][j];
        }
        for (i=0;i<m;i++)
        {
                cout<<endl;
                for (int j=0; j<n;j++)
                        cout<<a[i][j]<<"  ";
        }
        for(i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        if(a[i][j]==0) break;
                        if(j==n) h++;
        }
        return h;
 
//int nuts(int);
}
 
 
//int nuts(int **a, int m, int n);
//int nuts1(int **a, int m, int n);
 
int main()
{ 
    
float **a=NULL;
a= new float *[];
int n,m; 
for(int i=0;i<m;i++)
        {
                a[i]=new float [n];
        //        for (int j=0; j<n; j++)
          //              cin>>a[i][j];
        }
         
        cout<<"strok s '0' : "<<nuts(a)<<'\n';
         cout<<endl;
}

вот так правильно?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 19:04     Шаблоны функций #35
Нет. После инстанцирования будет float** nuts(float** **a)
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
06.05.2011, 19:44  [ТС]     Шаблоны функций #36
ААААААААА, вс1е, мой мозг кипит)))

Добавлено через 17 минут
напиши как , буду признателен=))
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.05.2011, 19:54     Шаблоны функций #37
Вероятно я наврал и инстанцирование пройдет так: float nuts(float **a)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2011, 15:34     Шаблоны функций
Еще ссылки по теме:

Шаблоны функций C++
C++ Шаблоны функций
C++ Шаблоны функций

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Iliabobr
3 / 3 / 1
Регистрация: 04.11.2009
Сообщений: 98
07.05.2011, 15:34  [ТС]     Шаблоны функций #38
все равно мне ето ниче не дает.....)))

Добавлено через 21 минуту
дык куды мне еето дело написать??

Добавлено через 1 минуту
вот я сделал все задания в проге, а вот с шаблоно все равно не прет..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include<iostream.h>
 
template <typename T> 
T nuts(T **a)
{
 
        int h;
        h=0;
        int m, n;
        int i =0;
        cout<<"Vvod razmernosti"<<endl;
        cout<<"m: ";
        cin>>m;
        cout<<"n: ";
        cin>>n;
        a= new T *[m];
 
        cout<<"Vvod matricy iz "<<m;
        cout<<" strok i "<<n<<" stolbov: ";
        cout<<endl;
        for(i=0;i<m;i++)
        {
                a[i]=new T [n];
                for (int j=0; j<n; j++)
                        cin>>a[i][j];
        }
        for (i=0;i<m;i++)
        {
                cout<<endl;
                for (int j=0; j<n;j++)
                        cout<<a[i][j]<<"  ";
        }
        for(i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        if(a[i][j]==0) break;
                        if(j==n) h++;
        }
cout<<"Strok bez '0'"<<h;
    cout<<endl;
    //  
 
float   max=0;
    //int m,n;
    for(i=0; i<m; i++)
        for(int j=0; j<n; j++)
        {
            if(a[i][j]>max) 
                for(int l=0; l<m;l++)
                    for(int p=0; p<n; p++)
                    {
                        if((a[i][j]==a[l][p]) && (p!=i || l!=j))
                            max=a[i][j];
                    }
        }
        cout<<"max: "<<max;
        cout<<endl;
    //  cout<<"Strok bez '0'"<<h;
    //  cout<<endl;
    //  cout<<"max: "<<max;
    //  cout<<endl;
return 0;
 
 
       // return h;
 
}
//template<class T1>
//T1 nuts1(T1 **a)
//{
//  float max;
/*  max=0;
    int m,n;
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
        {
            if(a[i][j]>max) 
                for(int l=0; l<m;l++)
                    for(int p=0; p<n; p++)
                    {
                        if((a[i][j]==a[l][p]) && (p!=i || l!=j))
                            max=a[i][j];
                    }
        }
    //  cout<<"max: "<<max;
    //  cout<<endl;
return max;*/
//}
 
 
int main()
{ 
    
float **a=NULL;
a= new float *[];
int n,m; 
for(int i=0;i<m;i++)
        {
                a[i]=new float [n];
        }
         
        /*cout<<"strok bez '0' : "<<*/nuts(a);//<<'\n';
         cout<<endl;
 
//        cout<<"max : "<<max<<'\n';
  //       cout<<endl;
 
}
Добавлено через 32 секунды
много закоментил тока))

Добавлено через 19 часов 6 минут
добрые люди сказали что так сделано правильно)
Yandex
Объявления
07.05.2011, 15:34     Шаблоны функций
Ответ Создать тему
Опции темы

Текущее время: 02:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru