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

Перегрузка функций - C++

Восстановить пароль Регистрация
 
pr1me222
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
19.01.2013, 22:41     Перегрузка функций #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
#include <iostream>
#include <conio.h>
// #include <stdio.h>
using namespace std;
 
int func (char S [])
    {
        //int i;
    //  char a[30];
    int space=0;
    for (int i = 1; i<= strlen(S); i++)
    {
        if (S[i] == ' ')
        {
            space++;
        }
    }
    return space+1;
}
 
int func (int s)
{ 
    double a[20];
    int i,p;
    s=0;
    for (i=0; i<20; i++)
        if (a[i]/2==0)
    {
    s++;
    }
        return s;
}
 
int main ()
{
    
    char a[20];
    int i, s;
    cout <<"Vvedite massiv strok ili chisel: ";
    for (i=0; i>20; i++);
    cin >> a[i];
    cout<< func (s);
    
    getch ();
}

Программа запускается но аварийно завершается. Это первая попытка создания перегруженных функций. Не очень понятно как в функции int main про инициализировать массив и каким типом объявлять. Ведь в зависимости от желания пользователя могут в него вводится или числа или символы. И от этого уже зависит какая функция именно будет вызываться, для подсчета слов или четных чисел.
Очень прошу указать на мои ошибки(( По возможности объяснить.)
Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 22:41     Перегрузка функций
Посмотрите здесь:

C++ Перегрузка функций
Перегрузка функций C++
C++ перегрузка функций
C++ Перегрузка функций
C++ перегрузка функций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
20.01.2013, 16:44     Перегрузка функций #2
Цитата Сообщение от pr1me222 Посмотреть сообщение
Не очень понятно как в функции int main про инициализировать массив и каким типом объявлять. Ведь в зависимости от желания пользователя могут в него вводится или числа или символы. И от этого уже зависит какая функция именно будет вызываться, для подсчета слов или четных чисел.
Весь смысл перегрузки - объединение множества различных функций, выполняющих по сути одни и те же действия, но имеющие специфичную для определённых типов и/или числа параметров реализацию, под одним именем. Какая из функций будет вызвана определяется ещё во время компиляции. Если вам нужен массив чисел, объявляете массив чисел, если нужен массив символов, соответственно объявляете массив символов.
Цитата Сообщение от pr1me222 Посмотреть сообщение
Очень прошу указать на мои ошибки(( По возможности объяснить.)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int func (char S [])
    {
        //int i;
    //  char a[30];
    int space=0;
    for (int i = 1; i<= strlen(S); i++)
    {
        if (S[i] == ' ')
        {
            space++;
        }
    }
    return space+1;
}
Цикл for не мешало бы переписать так
C++
1
2
3
// индекс первого элемента массива всегда 0
// признак конца С-строки символ '\0'
for (int i = 0; S[i] != '\0'; i++)
более удачный алгоритм подсчёта слов в строке можете посмотреть здесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
int func (int s)
{ 
    double a[20];
    int i,p;
    s=0;
    for (i=0; i<20; i++)
        if (a[i]/2==0)
    {
    s++;
    }
        return s;
}
C++
1
2
3
4
5
6
7
8
int func (int a[], int n) // a - массив; n - количество символов в массиве
{ 
    int s = 0;
    for (int i = 0; i < n; i++)
        if (a[i] % 2 == 0) s++; // подсчёт чётных чисел (% - извлечь остаток от деления двух целых чисел)
 
    return s;
}
Функцию main можете оформить приблизительно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const int s_len = 256;
char s[s_len];
 
cin.getline(s, s_len); // ввод строки
if(!cin) return 1; // ошибка ввода        
 
// вызов func и вывод результата
 
//---------
 
const int a_len = 10;
int a[a_len];
 
// ввод элементов целочисленного массива
for(int i = 0; i < a_len; ++i)
{
    cin >> a[i];
    if(!cin) return 1; // ошибка ввода    
}
 
// вызов func и вывод результата
pr1me222
0 / 0 / 0
Регистрация: 11.05.2011
Сообщений: 71
22.01.2013, 02:12  [ТС]     Перегрузка функций #3
Спасибо огромнейшее.)
ну вот еще один маленький вопросик..
подсчет слов работает, но вот когда вызываешь функцию для подсчета количество нечетных элементов

C++
1
cout << func (a[n]);
выбивает следующую ошибку : "error C2665: func: ни одна из 2 перегрузок не может преобразовать все типы аргументов."
а если вызываешь функцию так:
C++
1
cout << func (a[], n);
(понимаю что бред но все же..) выдает ошибку: "error C2059: синтаксическая ошибка: ] "
при чем первоначальная функция для подсчета количества слов вызвана вот так:

C++
1
cout << func(s);
как правильно вызват вторую функцию?..подскажите пожалуйста...
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
22.01.2013, 14:44     Перегрузка функций #4
Цитата Сообщение от pr1me222 Посмотреть сообщение
как правильно вызват вторую функцию?
C++
1
cout << func (a, n);
Yandex
Объявления
22.01.2013, 14:44     Перегрузка функций
Ответ Создать тему
Опции темы

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