forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Как работает алгоритм перегрузки метода? (http://forum.boolean.name/showthread.php?t=17089)

foldel 26.07.2012 00:50

Как работает алгоритм перегрузки метода?
 
Каким образом работает алгоритм перегрузки метода в Java(C++ или C#) или хотя бы как он называется?
Знаю только то, что у каждого метода есть своя подпись, которая состоит из имени метода и параметров.
Например есть метод A(int i1, int i2) и A(int i1, float f1).
Для первого метода подпись будет выглядеть так - A(II), а для второго так - A(IF). Вроде бы понятно как найти подходящую функцию...
А если например я вызываю A(II) и в параметры передаю не два числа типа int, а например char и byte. То выходит у меня получается A(CB), в то же время для этого случая подходит и функция A(IF). Как именно нужно определить подходящую функцию?

jimon 26.07.2012 01:03

Ответ: Как работает алгоритм перегрузки метода?
 
foldel
компилятор перебирает операторы приведения типов, если после приведения можно вызвать больше одного метода то он ругнётся ошибкой

foldel 26.07.2012 15:52

Ответ: Как работает алгоритм перегрузки метода?
 
Хм... Мне это мало о чем говорит...

moka 26.07.2012 16:11

Ответ: Как работает алгоритм перегрузки метода?
 
С# ругнётся и не подберёт нужный. Тебе нужно будет кастовать в нужный формат.

foldel 28.07.2012 00:44

Ответ: Как работает алгоритм перегрузки метода?
 
Мне всего лишь нужно знать как работает этот алгоритм, хочу написать компилятор в своему языку программирования.

ffinder 28.07.2012 01:15

Ответ: Как работает алгоритм перегрузки метода?
 
Цитата:

Сообщение от foldel (Сообщение 234530)
Мне всего лишь нужно знать как работает этот алгоритм, хочу написать компилятор в своему языку программирования.

"всего-лишь" это как-то оптимистично.
и что за компилятор, расскажи задумку?

jimon 28.07.2012 02:02

Ответ: Как работает алгоритм перегрузки метода?
 
foldel
у тебя будет таблица всех операторов приведения типов (aka из int в float и подобные), во время компиляции получаешь вызываемые типы и список методов которые можно вызвать, самый топорный вариант - начинаешь перебирать все операторы приведения и строить цепочку (например привести из long int в int, а потом в float), если удалось построить цепочку только для одного метода из нескольких перегруженных - ок, если удалось для нескольких - кидаем ошибку

foldel 29.07.2012 19:16

Ответ: Как работает алгоритм перегрузки метода?
 
Вложений: 1
Ну вообще мне сразу хотелось сделать компилятор для телефона, но со временем он так вырос, что я понял что на телефоне ему делать нечего, и продолжил писать уже для компа.
Он написан на Java и имеет свою виртуальную машину(которая естественно тоже написана на Java). Спецификация виртуальной машины похожа на JavaVM. Пока это чисто процедурный язык программирования.
Вот некоторая информация по языку:

Структура программы:

PHP код:

Program <Имя программы> {

    
record
    
{
        <
Имя записи>:
        {
            <
Тип поля> <Имя поля>;
        }
    }

    var 
    {
        <
Глобальные переменные>
    }

    
forward
    
{
        function <
Имя функции>(<Аргументы функции>):<Тип функции>;
    }
    
    
constructor
    
{
        <
Инструкции>
    }
    
    function <
Имя функции>(<Аргументы функции>):<Тип функции>;
    
label 
    
{
        <
Имя метки>;
    }
    var 
    {
        <
Тип переменной> <Имя переменной>;
    }
    {
        <
Инструкции>
    }
    
    
destructor
    
{
        <
Инструкции>
    }


Типы данных:

Void
Integer
String
Char
Float
Boolean

Вот выкладываю сырую версию программы(ну ОЧЕНЬ сырую и убогую).
В архиве Shrimp.jar - это и есть компилятор и runtime. Все остальные файлы - демонстративные исходники.
После компиляции исполняемые исполняемый файл будет в папке output(там где и программа).


Часовой пояс GMT +4, время: 03:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot