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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
13.03.2011, 11:43     Перегрузка функций #1
Стало интересно из-за возможна перегрузка функций в программе на языке С++, с чем это связано, как реализовано внутри программы?
Кто подскажет?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 11:43     Перегрузка функций
Посмотрите здесь:

C++ Перегрузка функций
C++ Перегрузка функций!
перегрузка функций. C++
Перегрузка функций C++
Перегрузка функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
13.03.2011, 12:24     Перегрузка функций #2
Функцию в языке С++ однозначно определяет ее сигнатура - это имя функции + список ее формальных параметров. Таким образом, функции с одинаковыми именами, но разными списками параметров, считаются разными.
Цитата Сообщение от DiabloRossi Посмотреть сообщение
как реализовано внутри программы?
Кто подскажет?
какой программы?
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
13.03.2011, 12:26  [ТС]     Перегрузка функций #3
Да вообще любой.)
Я был бы рад, если бы кто-нить самую простую прогу сбацал и на ее примере объяснил)
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
13.03.2011, 12:39     Перегрузка функций #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
#include <iostream>
#include <cstring>
#include <cstdlib>
 
#define PRINT(A) std::cout << #A << ": " << (A) << std::endl
 
void swap(int&, int&);
void swap(char*, char*);
 
int main()
{
    int ia = 5, ib = 6;
    char ca[] = "foo", cb[] = "bar";
 
    std::cout << "Before swapping:" << std::endl;
    PRINT(ia);
    PRINT(ib);
    PRINT(ca);
    PRINT(cb);
 
    swap(ia, ib);
    swap(ca, cb);
    
    std::cout << "After swapping:" << std::endl;
    PRINT(ia);
    PRINT(ib);
    PRINT(ca);
    PRINT(cb);
    
    return 0;
}
 
void swap(int& a, int& b)
{
    int t = a;
    a = b;
    b = t;
}
 
void swap(char* a, char* b)
{
    static char buf[BUFSIZ];
    
    strcpy(buf, a);
    strcpy(a, b);
    strcpy(b, buf);
}
Создаем две функции (перегруженные) swap, которые обменивают значения переменных одинаковых типов (первая функция работает с числовым типом, вторая - со строковым).
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
13.03.2011, 12:54  [ТС]     Перегрузка функций #5
Так, отлично)
а можно еще на примере какого-нибудь отладчика посмотреть, где компилятор успевает смотреть список формальных параметров?
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
13.03.2011, 13:18     Перегрузка функций #6
Цитата Сообщение от DiabloRossi Посмотреть сообщение
а можно еще на примере какого-нибудь отладчика посмотреть, где компилятор успевает смотреть список формальных параметров?
вот это вряд ли
DiabloRossi
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 49
13.03.2011, 13:25  [ТС]     Перегрузка функций #7
ну или хотя бы чисто теоретически объяснить)
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
13.03.2011, 13:37     Перегрузка функций #8
Здесь есть немного теории
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.03.2011, 13:44     Перегрузка функций #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
int f()
{
  return 0;
}
 
int f(int a)
{
  return 1;
}
 
int f(int a, int b)
{
  return 2;
}
 
int f(double a)
{
  return 3;
}
 
int f(double a, int b)
{
  return 4;
}
 
int f(double a, double* b)
{
  return 5;
}
 
int main()
{
  
}
Bash
1
2
g++ -O0 5.cpp 
nm ./a.out
Bash
1
2
3
4
5
6
7
8
...
080484b2 T _Z1fd
080484e4 T _Z1fdPd
080484cb T _Z1fdi
0804849e T _Z1fi
080484a8 T _Z1fii
08048494 T _Z1fv
...
каждую перегруженную функцию компилятор декорирует в соответствии с ее параметрами, а потом выполняет подстановку
думаю не сложно соорентироваться, что откуда
LeX
134 / 134 / 31
Регистрация: 30.06.2010
Сообщений: 545
13.03.2011, 20:03     Перегрузка функций #10
alex_x_x, как в vs2010 посмотреть как потом перегруженные функции именуются?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
14.03.2011, 07:22     Перегрузка функций #11
LeX BB, dumpbin, входящий в toolы студии, насчет параметров не помню
LeX
134 / 134 / 31
Регистрация: 30.06.2010
Сообщений: 545
14.03.2011, 14:02     Перегрузка функций #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
dumpbin
у меня русская версия
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
14.03.2011, 14:57     Перегрузка функций #13
Цитата Сообщение от LeX BB Посмотреть сообщение
у меня русская версия
Я думаю, название утилиты от этого не изменится

Ищи папку bin в папке, где установлена студия (по умолчанию C:\Program Files\Microsoft Visual Studio [НОМЕР ВЕРСИИ]\VC\bin), там ищи эту утилиту.
LeX
134 / 134 / 31
Регистрация: 30.06.2010
Сообщений: 545
14.03.2011, 15:07     Перегрузка функций #14
Nameless One, не поделишься библиотечкой mspdb100.dll?
Nameless One
14.03.2011, 15:10
  #15

Не по теме:

LeX BB, увы...

LeX
14.03.2011, 15:11
  #16

Не по теме:

эх...без нее не запускается

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 17:40     Перегрузка функций
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Shyrik694
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 11
14.03.2011, 17:40     Перегрузка функций #17
Цитата Сообщение от Nameless One Посмотреть сообщение
Здесь есть немного теории
Спс!Благодаря єтому пояснению разобрался..
Yandex
Объявления
14.03.2011, 17:40     Перегрузка функций
Ответ Создать тему
Опции темы

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