Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как избавиться от ошибки компоновщика? http://www.cyberforum.ru/cpp-beginners/thread46733.html
Как избавиться от ошибки компоновщика в vs2008? Сначала вылезала в мфц проектах, а теперь уже везде. Переустановка не помогает
C++ Error LNK2019 + упрощенный вариант консольной графики Программка из книги Лафоре "ОПП в С++", Глава 10. Закинул я msoftcon.h и msoftcon.срр в папку к исходникам.. #include "stdafx.h" #include <iostream> using namespace std; #include <ctime>... http://www.cyberforum.ru/cpp-beginners/thread46664.html
Программа работает не так как заявлено, нужен комментарий. C++
Привет. Ещё одна проблемка. Списал ещё одну прогу у Дэвиса, продолжаю учить по его книге. Программу дополнил командой удержания панели после вычислений, кириллическим отображением и #include...
Как организовать передачу данных между объектами разных классов? C++
Есть объект doc в нутрии него создается еще два объекта ui и engine, engine в свою очередь создает еще один объект obj. Вопрос, как из ui вызвать функцию объекта obj, да и вообще организовать обмен...
C++ Как записать Z в трёхмерном массиве http://www.cyberforum.ru/cpp-beginners/thread46632.html
ребята, простите за дурной вопрос, но не могу разобраться. есть массив const int Y = 2, X = 2, Z = 2; int a = {1,1,1, 2,2,2, }; куда записывать Z? судя из C++. Бархатный путь....
C++ Периодическое чтение файла Здравствуйте.Моя задача состоит в том, чтобы создать простую программу , которая бы просматривала текстовый файл и выполняла бы определенные действия, при этом файл будет постоянно пополнятся новыми... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
13.08.2009, 17:46
crashc, перегрузка функций подразумевает использование функций с одинаковым именем, при этом аргументы функции различны, тогда это действительно перегрузка

Вот что у меня получилось по этой проблеме (кстати использовал свои же материалы http://www.cyberforum.ru/cpp-beginners/thread20716/post237890.html)
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#include <windows.h>
#include <shlobj.h>//Подключаем SHL Dialog - диалог выбора файла или каталога
#include <stdio.h>
 
//SHL Dialog, использую для считывания строк из файла, 
//удобней ввести строки в txt-шнике чем каждій раз их вбивать в консоли
//под строкой понимаю текст между символами '\n' [строка] '\n'
 
//функцию, вычисляющую максимальный элемент :
 
//- в одномерном числовом массиве, состоящем из целых чисел;
int findmax(int nCount, int * mass);
//- в одномерном числовом массиве, состоящим из вещественных чисел;
float findmax(int nCount, float * mass);
//- в массиве строк (для этого массива функция должна находить строку с максимальной длиной).
int findmax(int nCount, char ** mass);
 
LPTSTR SelectFile();//Выбор файла с текстом
 
//Подсчёт числа строк в текстовом блоке
//под строкой понимаю текст между символами '\n' [строка] '\n'
//iPos - содержит индексы символов '\n' в блоке str
int GetNumStrings(LPTSTR str);
 
 
int * imass = (int *)malloc(sizeof(int));
float * fmass = (float *)malloc(sizeof(float));
 
char * str = (char *)malloc(sizeof(char));
int * iPos = (int *)malloc(sizeof(int));
 
void main()
{
    FILE *f;char ** smass;
    printf("Enter num elements of int vector\r\n");
    int iCount,i;scanf("%d",&iCount);
    if(0 < iCount)
    {
        imass = (int *)realloc((void *)imass,iCount*sizeof(int));
        for(i = 0; i < iCount; i++)
        {
            printf("mass[%d] : ",i + 1);
            scanf("%d",&imass[i]);
        }
    }
    printf("Enter num elements of float vector\r\n");
    int fCount;scanf("%d",&fCount);
    if(0 < fCount)
    {
        fmass = (float *)realloc((void *)fmass,fCount*sizeof(float));
        for(i = 0; i < fCount; i++)
        {
            printf("mass[%d] : ",i + 1);
            scanf("%f",&fmass[i]);
        }
    }
    int nStrings, sLen;
    char sPath[MAX_PATH];sPath[0] = '\0';
    if(sprintf(sPath,SelectFile()))
    {
        if((f = fopen(sPath,"rb+")))
        {
            fseek(f,0,SEEK_END);
            sLen = ftell(f);
            fseek(f,0,SEEK_SET);
            str = (char *)realloc(str,sLen);
            fread(str,1,sLen,f);
            str[sLen - 1] = '\0';
            fclose(f);
            nStrings = GetNumStrings(str);
            smass = new char * [nStrings];
            for(int i = nStrings - 1; 0 <= i; i--)
            {
                sLen = strlen((LPCTSTR)(str + (iPos[i] + 1)));
                //Копируем строки из блока str в массив smass
                smass[nStrings - (i + 1)] = (char *)malloc(sLen*sizeof(int));
                strcpy(smass[nStrings - (i + 1)], str + (iPos[i] + 1));
                str[iPos[i]] = '\0';
            }
            iPos = (int *)realloc((void *)iPos,sizeof(int));
            if(str)
                str = (char *)realloc(str,sizeof(char));
        }
    }
    int iMAX = -1;
    if(0 < iCount)
        iMAX = findmax(iCount, imass);
    else
        iCount = -1;
    
    float fMAX = -1;
    if(0 < fCount)
        fMAX = findmax(fCount, fmass);
    else
        fCount = -1;
    
    int sMAX_INDEX = -1;
    if(0 < nStrings)
        sMAX_INDEX = findmax(nStrings, smass); 
 
    printf("\r\nMaximal element in int vecor : ");
    if(-1 < iCount)
        printf("%d",iMAX);
    else
        printf("Cann't be computed!");
 
    printf("\r\nMaximal element in float vecor : ");
    if(-1 < fCount)
        printf("%f",fMAX);
    else
        printf("Cann't be computed!");
 
    printf("\r\nMaximal element in string vecor : ");
    if(-1 < sMAX_INDEX)
        printf("%s",smass[sMAX_INDEX]);
    else
        printf("Cann't be computed!");
 
    //Чистим память
    imass = (int *)realloc((void *)imass,sizeof(int));
    fmass = (float *)realloc((void *)fmass,sizeof(float));
    for(i = nStrings - 1; 0 <= i; i--)
        free(smass[i]);
    printf("\r\nEnter NUM1 to enter new massivs\r\n");
    scanf("%d",&i);
    if(i == 1)
        main();
}
 
int findmax(int nCount, int * mass)
{
    int RetVal = mass[0];
    for(int i = 1; i < nCount; i++)
    {
        if(RetVal < mass[i])
            RetVal = mass[i];
    }
    return RetVal;
}
 
float findmax(int nCount, float * mass)
{
    float RetVal = mass[0];
    for(int i = 1; i < nCount; i++)
    {
        if(RetVal < mass[i])
            RetVal = mass[i];
    }
    return RetVal;
}
 
int findmax(int nCount, char ** mass)
{
    int RetVal = 0,sLen;
    for(int i = 0; i < nCount; i++)
    {
        sLen = strlen(mass[RetVal]);
        if(sLen < strlen(mass[i]))
            RetVal = i;
    }
    return RetVal;//Здесь возвращаем индекс строки а не саму строку!!!
}
 
LPTSTR SelectFile()
{
    char sPath[MAX_PATH];sPath[0] = '\0';
    LPCITEMIDLIST lpItemDList;
    BROWSEINFO bi = {NULL, NULL, sPath,
       "Выберите файл для обработки",
        BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
        NULL,
        NULL,
        0
    };
    if((lpItemDList=SHBrowseForFolder(&bi)))
    {
        if(SHGetPathFromIDList(lpItemDList, sPath))
            GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
    }
    return &sPath[0];
}
 
int GetNumStrings(LPTSTR str)
{
    int RetVal = 0;
    //Вдруг вначале текста идут символы новой строки
    while(str[0] == '\n')
        str++;
    char * chBuf = strchr(str,'\n');
    //На случай если в файле всего 1 строка
    if(!chBuf && strlen(str))
    {
        iPos[RetVal] = 0;
        RetVal++;
    }
    while(chBuf)
    {
        iPos[RetVal] = strlen(str) - strlen(chBuf);
        RetVal++;
        chBuf++;
        if(chBuf)
            chBuf = strchr(chBuf,'\n');
        iPos = (int *)realloc((void *)iPos,sizeof(int)*(RetVal + 1));
    }
    return RetVal;
}
0
Миниатюры
Перегруз функции   Перегруз функции  
Вложения
Тип файла: txt text_block.txt (101 байт, 23 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.