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

Перегружаемые функции - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Luna17
 Аватар для Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
28.04.2010, 20:08     Перегружаемые функции #1
помогите с программой, и если с можете поясните сами функции, а то совсем в них запуталась, сколько не читала теории. а понять не могу

Прога:
Организовать 2 перегружаемые функции для сортировки числового и символьного массива, предусмотрев параметр заданный по умолчанию. По умолчанию порядок сортировки от минимального к максимальному элементу.

есть моя заготовка по началу:

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
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
//void k(int*, int, int =0);
void k(int *x, int n, int dir=0)
{ 
    cout << "funcion int k((int x[])" << endl;
    return ;
}
//void k(char*, int, int=0);
void k(char *x, int n, int dir=0)
{
    cout << "funcion char k((char x[])" << endl;
    return ;
}
 
int main(void)
{
    int *mas;
    int size;
    k(mas, size, 1);
    mas=new int*[n];
    for (int i=0, i<n, i++) cin >>x[i];
 
    mas=new char*[n];
    for (int i=0, i<n, i++) cin >>x[i];
    delete x;
    return 0;
}
и заготовка подруги, но тут уж больно много ошибок выдает компилятор и понять сложно:
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
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <locale.h>
#include <stdio.h>
#include <string.h>
using namespace std;
void vivod(int num[], int n);
void sort (int *a, int N, int f=0);
void sort (char *n, char x, int N, char s=0);
const int N=10;
int main(void)
{
    int t[10], i;
    for(i=0; i<10; i++);
        vivod (t,10);
        sort(t, N);
        _getch();
    return 0;
}
void vivod (int num[10])
{
    int i, n;
    for(i=0; i<n; i++) printf("%d ", num[i]);
}
void sort (int *a, int N, int f=0)
{   int i, buf;
    for (int pass=1; pass < N; pass++)
        for (i=0; i < N-1; i++)
            if (a[i] > a[i+1]) {
                buf=a[i];
                a[i]=a[i+1];
                a[i+1]=buf;
            }
            cout << endl << "Элементы данных в порядке возрастания" << endl;
            for (i=0; i<N; i++)
                cout << setw(6) << a[i];
            cout << endl;
            printf(
             "%6d\n", a 
                 );
 
        _getch();
 
}
void sort (char *n, char x, int N, char s=0)
{   int i,j;
    printf ("Введите строку:");
    printf ("\n");
    for (i=0;i<N;i++)
        gets(n[i]);
        for (i=(N-1);i>0;i--)
            for(j=i;j<N;j++)
                if (strcmp (n[j],n[j-1])<0)
                {
                    strcpy (x,n[j]);
                    strcpy (n[j],n[j-1]);
                    strcpy (n[j-1],x);
                }
            printf("Отсортированные строки:");
            printf("\n");
            for(i=0;i<N;i++)
                puts(n[i]);
}
буду очень благодарна за любую помощь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.04.2010, 21:45     Перегружаемые функции #21
Luna17, вот, все работает:
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
#include <iostream>
#include <algorithm>
#include <iterator>
 
void Swap(int& l, int& r) {
  int tmp = l;
  l  = r;
  r  = tmp;
}
 
void Swap(char& l, char& r) {
  int tmp = l;
  l  = r;
  r  = tmp;
}
 
void SortExchange(int* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i) {
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j - 1] > arr[j] : arr[j-1] < arr[j])
        Swap(arr[j], arr[j - 1]);
  }
}
 
void SortExchange(char* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i) {
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j-1] > arr[j] : arr[j - 1] < arr[j])
        Swap(arr[j], arr[j - 1]);
  }
}
 
int main()
{
  int int_arr[]    = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
  int int_arr_size = sizeof(int_arr) / sizeof(int_arr[0]);
 
  char char_arr[]    = {'b', 'c', 'z', 'c', 'd', 'r'};
  int  char_arr_size = sizeof(char_arr) / sizeof(char_arr[0]);
 
  SortExchange(char_arr, char_arr_size);
  std::copy(char_arr, char_arr + char_arr_size, std::ostream_iterator<char>(std::cout, " "));
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size, 0);
  std::copy(int_arr, int_arr + int_arr_size, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
 
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Luna17
 Аватар для Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 01:56  [ТС]     Перегружаемые функции #22
CyBOSSeR, теперь понятно, я чуть позже выложу что у меня получается, т к заголовочную часть пришлось изменять с прихоти преподавательницы

Добавлено через 15 часов 17 минут
CyBOSSeR,
я переделала прогу под твою, типа, но у меня до main все норм а полсе ошибки выдает мож глянуть и показать что надо сделать чо бы норм работала

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
109
110
111
112
113
114
115
116
// m,rjhkgfle.cpp: определяет точку входа для консольного приложения.
//
 
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <string.h> 
 
#include <iomanip>
#include <conio.h>
#include <locale.h>
 
using namespace std;
 
void k (int *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
            cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void k (char *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
             cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void Sort(int *x, const int &size,  int dir=0)
{  
    cout << "funcion int k((int x[])" << endl;
    int buff;
    if (dir == 0)
    {
          for (int i = 0; i < size; i++)
                {
                 for (int j = i+1; j < size; j++)
                    {
                        
                        if (dir == 0? x[j] <= x[j] : x[j+1] < x[j]){buff = x[i]; x[i] = x[j]; x[j] = buff;}
    
 
                 }
                    }
    }
    else (dir == 1);
    {
             for (int i = 1; i < size; ++i) 
            {
                 for (int j = i-1; j >= i; --j)
                 {
                     if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buff = x[i-1]; x[i-1] = x[i]; x[i] = buff;}
                 {
            }
}
         }
    }
 }
 
 
void Sort(char *x, const int &size, int dir=0)
{
        cout << "funcion char k((char x[]) \n" << endl;         
        char buf;
        if (dir == 0)
        {
          for (int i = 1; i < size; i++)
          {
             for (int j = i+1; j >= i; j++)
                 {
                    if (dir == 0? x[j+1] > x[j] : x[j+1] < x[j]){buf = x[i]; x[i] = x[j]; x[j] = buf;} 
                 }
          }
        }
        else (dir == 1);
        {
          char buf;
    for (int i = 1; i < size; ++i) 
        {
             for (int j = i-1; j >= i; --j)
             {
                 if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buf = x[i-1]; x[i-1] = x[i]; x[i] = buf;}
             {
        
        }
}
    }
        }
}
 
int main(void)
{    
 
        int int_x[] = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
        int int_x_size =  sizeof(int_x[0]);
    
        char char_x[] = {'b', 'c', 'z', 'c', 'd', 'r'};
        int  char_x_size =  sizeof(char_x[0]);
 
        Sort(char_x, char_x_size );
        std::copy( char_x, char_x + char_x_size, std::ostream_iterator<char>(std::cout, " "));
        std::cout << std::endl;
 
        Sort(int_x , int_x_size, 0);
        std::copy(int_x, int_x + int_x_size, std::ostream_iterator< int >(std::cout, " "));
        std::cout << std::endl;
 
        _getch();
  return 0;
}
Ошибки при компиляции
1>Компиляция...
1>m,rjhkgfle.cpp
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(107) : error C2039: ostream_iterator: не является членом "std"
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(107) : error C2065: ostream_iterator: необъявленный идентификатор
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(107) : error C2062: тип "char" не требуется
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(111) : error C2039: ostream_iterator: не является членом "std"
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(111) : error C2065: ostream_iterator: необъявленный идентификатор
1>c:\users\вероника\documents\visual studio 2008\projects\m,rjhkgfle\m,rjhkgfle\m,rjhkgfle.cpp(111) : error C2062: тип "int" не требуется
1>Журнал построения был сохранен в "file://c:\Users\Вероника\Documents\Visual Studio 2008\Projects\m,rjhkgfle\m,rjhkgfle\Debug\BuildLog.htm"
1>m,rjhkgfle - ошибок 6, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 3 минуты
Добавила заголовочные файлы и вместо сортировки получила что то не ясное
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
109
110
111
112
113
114
115
116
117
118
119
// m,rjhkgfle.cpp: определяет точку входа для консольного приложения.
//
 
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <string.h> 
 
#include <algorithm>
#include <iterator>
 
#include <iomanip>
#include <conio.h>
#include <locale.h>
 
using namespace std;
 
void k (int *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
            cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void k (char *x , const int &size)
{
        for (int i = 0; i < size; i++)
        {
             cout << x[i] << " " ;
        }
        cout << '\n';
}
 
 
void Sort(int *x, const int &size,  int dir=0)
{  
    cout << "funcion int k((int x[])" << endl;
    int buff;
    if (dir == 0)
    {
          for (int i = 0; i < size; i++)
                {
                 for (int j = i+1; j < size; j++)
                    {
                        
                        if (dir == 0? x[j] <= x[j] : x[j+1] < x[j]){buff = x[i]; x[i] = x[j]; x[j] = buff;}
    
 
                 }
                    }
    }
    else (dir == 1);
    {
             for (int i = 1; i < size; ++i) 
            {
                 for (int j = i-1; j >= i; --j)
                 {
                     if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buff = x[i-1]; x[i-1] = x[i]; x[i] = buff;}
                 {
            }
}
         }
    }
 }
 
 
void Sort(char *x, const int &size, int dir=0)
{
        cout << "funcion char k((char x[]) \n" << endl;         
        char buf;
        if (dir == 0)
        {
          for (int i = 1; i < size; i++)
          {
             for (int j = i+1; j >= i; j++)
                 {
                    if (dir == 0? x[j+1] > x[j] : x[j+1] < x[j]){buf = x[i]; x[i] = x[j]; x[j] = buf;} 
                 }
          }
        }
        else (dir == 1);
        {
          char buf;
    for (int i = 1; i < size; ++i) 
        {
             for (int j = i-1; j >= i; --j)
             {
                 if (dir == 1? x[j-1] > x[j] : x[j-1] < x[j]){buf = x[i-1]; x[i-1] = x[i]; x[i] = buf;}
             {
        
        }
}
    }
        }
}
 
int main(void)
{    
 
        int int_x[] = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
        int int_x_size =  sizeof(int_x[0]);
    
        char char_x[] = {'b', 'c', 'z', 'c', 'd', 'r'};
        int  char_x_size =  sizeof(char_x[0]);
 
        Sort(char_x, char_x_size );
        std::copy( char_x, char_x + char_x_size, std::ostream_iterator<char>(std::cout, " "));
        std::cout << std::endl;
 
        Sort(int_x , int_x_size, 0);
        std::copy(int_x, int_x + int_x_size, std::ostream_iterator< int >(std::cout, " "));
        std::cout << std::endl;
 
        _getch();
  return 0;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 02:05     Перегружаемые функции #23
Цитата Сообщение от Luna17 Посмотреть сообщение
C++
1
int int_x_size = *sizeof(int_x[0]);
Luna17, sizeof позволяет получить размер аргумента в байтах. Функции же принимают размер массива в виде количества элементов. Для того чтобы получить количество элементов в массиве необходимо разделить размер массива в байтах на размер элемента массива, т.е.
C++
1
sizeof(arr) / sizeof(arr[0])
Luna17, ничего не переделывай, то что ты переделала - не будет работать, даже если избавится от синтаксических ошибок.
Luna17
 Аватар для Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 09:57  [ТС]     Перегружаемые функции #24
CyBOSSeR, а с тем что у меня вышло уже совсем ничего нельзя сделать? просто желательно исправить о что есть
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 12:22     Перегружаемые функции #25
Цитата Сообщение от Luna17 Посмотреть сообщение
CyBOSSeR, а с тем что у меня вышло уже совсем ничего нельзя сделать?
Только если переписать заново, чем тебя не устраивает работающий вариант?
Luna17
 Аватар для Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 14:00  [ТС]     Перегружаемые функции #26
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Luna17, вот, все работает:
C++
1
2
3
4
5
6
7
8
9
10
  SortExchange(char_arr, char_arr_size);
  std::copy(char_arr, char_arr + char_arr_size, std::ostream_iterator<char>(std::cout, " "));
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size, 0);
  std::copy(int_arr, int_arr + int_arr_size, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
 
  return 0;
}
тем что я не понимаю вот эту часть, и надо что бы было 4 вызова функции
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 16:33     Перегружаемые функции #27
Luna17, вот вариант попроще, с 4-мя вызовами функции сортировки:
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
#include <iostream>
 
void SortExchange(int* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i)
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j - 1] > arr[j] : arr[j-1] < arr[j]) {
        int tmp        = arr[j - 1];
            arr[j - 1] = arr[j];
            arr[j]     = tmp;
      }
}
 
void SortExchange(char* arr, int size, int sort_up = 1) {
  for (int i = 1; i < size; ++i) {
    for (int j = size - 1; j >= i; --j)
      if (sort_up == 1? arr[j-1] > arr[j] : arr[j - 1] < arr[j]) {
        char tmp        = arr[j - 1];
             arr[j - 1] = arr[j];
             arr[j]     = tmp;
      }
  }
}
 
int main()
{
  char char_arr[]    = {'b', 'c', 'z', 'c', 'd', 'r'};
  int  char_arr_size = sizeof(char_arr) / sizeof(char_arr[0]);
 
  for (int i = 0; i < char_arr_size; ++i)
    std::cout << char_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(char_arr, char_arr_size);
  for (int i = 0; i < char_arr_size; ++i)
    std::cout << char_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(char_arr, char_arr_size, 0);
  for (int i = 0; i < char_arr_size; ++i)
    std::cout << char_arr[i] << " ";
  std::cout << std::endl;
 
  int int_arr[]    = {5, 1, 4, 6, 3, 3, 6, 7, 8, 9, 0};
  int int_arr_size = sizeof(int_arr) / sizeof(int_arr[0]);
 
  for (int i = 0; i < int_arr_size; ++i)
    std::cout << int_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size);
  for (int i = 0; i < int_arr_size; ++i)
    std::cout << int_arr[i] << " ";
  std::cout << std::endl;
 
  SortExchange(int_arr , int_arr_size, 0);
  for (int i = 0; i < int_arr_size; ++i)
    std::cout << int_arr[i] << " ";
  std::cout << std::endl;
 
  return 0;
}
Luna17
 Аватар для Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
02.05.2010, 22:47  [ТС]     Перегружаемые функции #28
терь все так, и выводит рез вроде правильно, оч надеюсь, что преподу ничего нового в голову не взбредет,\

у ми то 1 вопрос, для чего мы пишем std и что она делает???
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
02.05.2010, 22:56     Перегружаемые функции #29
у ми то 1 вопрос, для чего мы пишем std и что она делает???
Про "Поименованные области" почитай и поймешь что это.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2010, 23:06     Перегружаемые функции #30
Цитата Сообщение от Luna17 Посмотреть сообщение
у ми то 1 вопрос, для чего мы пишем std и что она делает???
cout, cin входят в состав пространство имен std, поэтому их использование без указания тем или иным образом имени пространства имен не возможно. Подробнее можешь прочитать здесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2010, 22:15     Перегружаемые функции
Еще ссылки по теме:

C++ Создать перегружаемые функции и шаблоны для типов int и double
C++ можно ли делать виртуальными перегружаемые операторы?
C++ Определить типы и функции; в функции main() реализовать демонстрацию работы

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

Или воспользуйтесь поиском по форуму:
Luna17
 Аватар для Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
03.05.2010, 22:15  [ТС]     Перегружаемые функции #31
CyBOSSeR, пасяб поняла
Yandex
Объявления
03.05.2010, 22:15     Перегружаемые функции
Ответ Создать тему
Опции темы

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