Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2014, 13:16   #1
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию Overload

Почему это программа не работает? я сделал функции перегруженнымы, но когда я подставляю целое число почему- то он автоматически не вызывает функцию для целого числа.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,math;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }

  end;

  TMain = Class
    f:integer;
    Function sum(a:integer):integer; overload;
  end;

  TNotMain = Class(TMain)
    r:integer;
    Function  Sum(a:Extended):Extended; Overload;
  end;




var
  Form1: TForm1;
  Per : TNotMain;

implementation

{$R *.dfm}
 { TMain }

Function TMain.sum(a: integer):integer;
begin
   Result := sqr(a);
end;

{ TNotMain }

Function TNotMain.Sum(a: Extended):Extended;
begin
    Result := sqr(a) +2;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  per := TNotMain.Create;
  per.r := 2;
  Per.Sum(2);

  per.Free;
end;


end.
[Error] Unit1.pas(64): Ambiguous overloaded call to 'Sum'-это ошибку выдает
aleksskay вне форума Ответить с цитированием
Старый 29.09.2014, 13:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
  TMain = Class
    f:integer;
    Function sum(a:integer):integer; virtual;
  end;

  TNotMain = Class(TMain)
    r:integer;
    Function  Sum(a:Extended):Extended; Override;
  end;
Ты Оверлоад и Оверрайд попутал )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2014, 14:01   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Ты Оверлоад и Оверрайд попутал )
там разные аргументы (integer|extended) так что никак не virtual override, а именно overload
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.09.2014, 14:37   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Per.Sum(2.0)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.09.2014, 14:59   #5
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию

Цитата:
Per.Sum(2.0)
так конечно работает но он не должен автоматически вызывать функцию для целого числа?
aleksskay вне форума Ответить с цитированием
Старый 29.09.2014, 15:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет. Overload различает передаваемые типы. Ты ему четко дал число с разделителем дробных - Вызовется функция для вещественного.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2014, 15:03   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

целое число в Делфи по умолчанию совместимо и с целыми и с вещественными типами, от того и ошибка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.09.2014, 19:35   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
[Error] Unit1.pas(64): Ambiguous overloaded call to 'Sum'-это ошибку выдает
Всё верно. Надо было не лезть в дикой панике в интернеты, а, для начала, жмакнуть F1:

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.09.2014, 22:57   #9
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию

Дикой паники, конечно, у меня не было. И что вы там написали?
aleksskay вне форума Ответить с цитированием
Старый 29.09.2014, 22:59   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
Вопрос

Цитата:
Сообщение от aleksskay Посмотреть сообщение
Дикой паники, конечно, у меня не было. И что вы там написали?
"Там" - это где?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FileAge overload как обратится Dozent Общие вопросы Delphi 10 14.10.2013 12:17
Overload in DLL Khayzenberg Общие вопросы Delphi 3 23.08.2012 13:08
SelectDirectory overload начальная папка eks-s Общие вопросы Delphi 2 06.12.2008 05:37