PDA

View Full Version : تعریف دو تابع یکسان با خروجیهای متفاوت



bootshow
سه شنبه 11 خرداد 1389, 19:16 عصر
سلام
من میخواهم دو تابع تعریف کنم که نام یکسانی داشته باشند و دقیقا پارامترهای آنها هم یکی باشد ، فقط خروجی های آنها از دو نوع متفاوت باشد.مثل نمونه پایین.با overload نمیشه.help خود دلفی هم گفته نمیشه؟؟!!
چطوری این کارو بکنم؟

function ab(a:integer):integer;overload
function ab(a:integer):string;overload

SAASTN
سه شنبه 11 خرداد 1389, 19:36 عصر
درسته، نمیشه، باید چینش پارامتر ها متفاوت باشن. معمولا یه توی یکی از توابع یه پارامتر بی مصرف تعریف می کنن:

function ab(a:integer): integer; overload;
function ab(a: integer; const Useless: Byte): string; overload;

bootshow
سه شنبه 11 خرداد 1389, 22:03 عصر
درسته ولی چون میخواستم سورس یکی از کامپاننتها را تغییر بدم مجبور بودم از این روش استفاده کنم.تعداد پارامترها باید دقیقا برابر همدیگه باشه؟!!!!

bootshow
سه شنبه 11 خرداد 1389, 22:10 عصر
درسته ولی چون میخواستم سورس یکی از کامپاننتها را تغییر بدم مجبور بودم از این روش استفاده کنم.تعداد پارامترها باید دقیقا برابر همدیگه باشه؟!!!!حتی بصورت زیر هم کارم نمیشه!!!!!ببین کارم چقد گیره؟؟!!
دارم روی TMS Scripter Studio Pro کار میکنم.ImportTool اون کدهارو کاملا تبدیل نمیکنه.سورس TMS Scripter Studio Pro را دارم ولی سورس importtool را گیر نیاوردم.تازه مجانی هم هست.
function ab(a:integer): integer; overload;
function ab(a: integer; Useless: Byte=0): string; overload;

SAASTN
چهارشنبه 12 خرداد 1389, 00:56 صبح
درست متوجه نمی شم. یعنی این تابع از جای دیگه ای call شده و به سورس محل فرا خونی دسترسی ندارین؟
خوب compiler بنده خدا از کجا باید متوجه بشه که وقتی شما تابع رو فراخونی می کنید منظورتون کدوم یکی از overload هاست؟ اینجا یه ابهامی هست که کاریش نمیشه کرد.

vcldeveloper
چهارشنبه 12 خرداد 1389, 01:15 صبح
حتی بصورت زیر هم کارم نمیشه!
برای اینکه دو تابع overload بشند، باید Signature آنها با هم متفاوت باشه. خروجی یک تابع بخشی از Signature یک تابع نیست. در مثال دوم شما هم، پارامتر دومی که تعریف کردید، اختیاری هست، و اگر شما تابع دوم را بدون پارامتر اختیاری مربوطه فراخوانی کنید، کامپایلر نمیدونه مقدار خروجی تابع رو باید integer در نظر بگیره، یا string!


تعداد پارامترها باید دقیقا برابر همدیگه باشه؟!
نه، مشکل شما، همانطور که در بالا گفتم، در اختیاری بودن پارامتر دوم هست.