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

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

Восстановить пароль Регистрация
 
saserlend
10 / 10 / 1
Регистрация: 25.11.2011
Сообщений: 138
10.11.2013, 19:56     Перегрузка функций #1
Есть функция Message которую я пытаюсь перегрузить. Вроде все правильно, но не работает . Помогите разобраться. Ошибка на 44 и 45 строчку.
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
#include <time.h>
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
 
class mass_bool
{
private:    const int iLenght, iWidth, iHeight; 
            int ***pppLink;
            bool bCounter;
 
public:     mass_bool(): iLenght(0), iWidth(0), iHeight(0){}
            mass_bool(int,int,int);
            mass_bool(const mass_bool &Z);
            ~mass_bool();
 
            void ShowArray();
            void FillArray();
            void Sort();
            friend void Message();
};
 
mass_bool TransitRef( const mass_bool& ); //Транзитные функции
mass_bool TransitPtr( const mass_bool* );
mass_bool TransitVal( mass_bool ) ;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    srand( ( unsigned ) time ( NULL ) );
 
    const int *i = new int ( rand () % 8 + 2 );
    const int *j = new int ( rand () % 8 + 2 );
    const int *k = new int ( rand () % 8 + 2 );
 
    const int iLe = *i;
    const int iWi = *j;
    const int iHi = *k;
    
    mass_bool arr ( iLe, iWi, iHi );
 
    Message();
    Message( "Массив задается автоматически\n" );
    Message( "Размерность " , "массива - " );
    cout << "[" << iLe << "] [" << iWi << "] [" << iHi << "]" << endl;
 
    arr.FillArray();
    arr.ShowArray();
    arr.Sort();
    arr.ShowArray();
    
    cout << endl;
    system ( "pause" );
    return 0;
}
 
mass_bool::mass_bool(int nD1,int nD2,int nD3):iLenght(nD1),iWidth(nD2),iHeight(nD3),pppLink(0)//Конструктор
{ 
    pppLink = new int**[iLenght]; //Создание указателей на указатели на Int
 
    for(int i=0; i < iLenght; i++) //Создание массива указателей на Int
    {
        
        pppLink[i] = new int*[iWidth];
    } 
 
    for(int i=0; i < iLenght; i++) //Создание массива int
    {
        for(int j=0; j < iWidth; j++)
        {
            pppLink[i][j] = new int[iHeight];
        }
    }
 
cout << "Сработал конструктор\n";
getch();
}
 
mass_bool::mass_bool(const mass_bool& Z):iLenght(Z.iLenght),iWidth(Z.iWidth),iHeight(Z.iHeight)//Копирующий конструктор
{
    pppLink = new int**[iLenght]; //Создание указателей на указатели на Int
 
    for(int i=0; i < iLenght; i++) //Создание массива указателей на Int
    {
        pppLink[i] = new int*[iWidth];
    } 
 
    for(int i=0; i < iLenght; i++) //Создание массива int
    {
        for(int j=0; j < iWidth; j++)
        {
            pppLink[i][j] = new int[iHeight];
        }
    }
 
    for(int i=0; i < iLenght; i++) 
    {
        for(int j=0; j < iWidth; j++)
        {
            for(int k=0; k < iHeight; k++)
            {
                pppLink[i][j][k] = Z.pppLink[i][j][k];
            }
        }
    }
 
cout << "Сработал конструктор копирования\n";
getch();
}
 
mass_bool::~mass_bool() //Деструктор
{
    for(int i=0; i < iLenght; i++) //Удаление массивов указателей на INT
    {
        for(int j=0; j < iWidth; j++)
        {
            delete []pppLink[i][j];
        }
    }
 
    for(int i=0; i < iLenght; i++) //Удаление массивов указателей на указатели на INT
    {
        delete []pppLink[i];
    }
 
    if(iLenght != 0)        //Удаление простого массива
    {
        delete []pppLink;
    }
 
cout << "Сработал деструктор\n";
getch();
}
 
void mass_bool::ShowArray() //Просмотр элементов массива.
{
    cout << endl;
    for(int i=0; i < iWidth; i++) 
    {
        for(int j=0; j < iLenght; j++)
        {
            for(int k=0; k < iHeight; k++)
            {
                cout << pppLink[j][i][k]; 
            }
        cout << "\t";
        }
    cout << endl;
    }
}
 
void mass_bool::FillArray() // Заполнение массива
{
    srand ( time ( NULL ) );
    for(int i=0; i < iLenght; i++)
    {
        for(int j=0; j < iWidth; j++)
        {
            for(int k=0; k < iHeight; k++)
            { 
                pppLink [i][j][k] = static_cast < bool > ( rand ( ) % 2 );
                
            } 
        }
    }
}
 
void mass_bool::Sort() //Сортировка.
{
    for(int i=0; i < iLenght; i++)
    {
        for(int j=0; j < iWidth; j++)
        {
            for(int k=0; k < iHeight; k++)
            {
                for(int ch=0; ch < iHeight-1; ch++)
                {
                    if( pppLink [i][j][k] < pppLink [i][j][ch] )
                    {
                        bCounter = pppLink [i][j][k];
                        pppLink [i][j][k] = pppLink [i][j][ch];
                        pppLink [i][j][ch] = bCounter;
                    }
                }
            }
        }
    }
}
 
void Message()
{ 
    cout << "Класс обработки трехмерного булевского массива\n\n"; 
}
 
void Message( char *message_1 )
{ 
    cout << message_1 << endl; 
}
 
void Message( char *message_2, char *message_3 )
{ 
    cout << message_2; 
    cout << message_3 << endl; 
}
 
mass_bool TransitRef(const mass_bool &s)
{
    cout << "Number 1\n" << endl;
    return s;
}
 
mass_bool TransitPtr(const mass_bool *s)
{
    cout << "Number 2\n" << endl;
    return *s;
}
 
mass_bool TransitVal(mass_bool s)
{
    cout << "Number 3\n" << endl;
    return s;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
10.11.2013, 20:17     Перегрузка функций #2
Определения функций перед мейном сделайте
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.11.2013, 20:19     Перегрузка функций #3
Попробуйте вместо
C++
1
2
3
4
5
6
7
8
9
10
void Message( char *message_1 )
{ 
    cout << message_1 << endl; 
}
 
void Message( char *message_2, char *message_3 )
{ 
    cout << message_2; 
    cout << message_3 << endl; 
}
написать
C++
1
2
3
4
5
6
7
8
9
10
void Message( const char *message_1 )
{ 
    cout << message_1 << endl; 
}
 
void Message( const char *message_2, const char *message_3 )
{ 
    cout << message_2; 
    cout << message_3 << endl; 
}
saserlend
10 / 10 / 1
Регистрация: 25.11.2011
Сообщений: 138
10.11.2013, 20:22  [ТС]     Перегрузка функций #4
Цитата Сообщение от scenotaph Посмотреть сообщение
Определения функций перед мейном сделайте
Понятно, но разве перегрузка функции будет? Здесь, же получается просто вызов одной функции с разными параметрами. Или я ошибаюсь?
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
10.11.2013, 20:26     Перегрузка функций #5
saserlend, Почему нет? Перегрузка это и есть определение функций с одинаковым именем но разными параметрами. Под разными подразумевается их тип, количество
saserlend
10 / 10 / 1
Регистрация: 25.11.2011
Сообщений: 138
10.11.2013, 20:26  [ТС]     Перегрузка функций #6
Цитата Сообщение от lemegeton Посмотреть сообщение
error C2660: Message: функция не принимает 1 аргументов
error C2660: Message: функция не принимает 2 аргументов

Все равно ошибки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 22:07     Перегрузка функций
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Сонца
 Аватар для Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
10.11.2013, 22:07     Перегрузка функций #7
saserlend,
вынесите прототипы перегруженных функций до функции main (){}
C++
1
2
3
4
5
6
void Message( char *message_1 );
void Message( char *message_2, char *message_3 );
int main()
{
//...
}
И все заработает.
Yandex
Объявления
10.11.2013, 22:07     Перегрузка функций
Ответ Создать тему
Опции темы

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