على فرض أريد أن أبني كلاس للمكدس stack . أريد أن أستخدم هذا الكلاس نفسه لأكثر من نوع من المعطيات مثلا مرة لل Int ومرة لل Float وهكذا ..
فما هي أحسن طريقة لفعل ذلك ...
يوجد في السي++ مايسمى بال template .. بصراحة أريد أن أعمل متلها ..
ياريت توضح بمتال .. بلغة c
وشكرا
اهلاً وسهلاً بك اخي هاني
الصحيح مالك شوفات :) وين الناس
على العموم
ممكن لو توضح سؤالك اكثر
وفي الختام تقبل اطيب تحياتي اخوك SUM
تخيل أنه لديك كلاس يجمع عددين .. هكذا فقط يجمع عددين .. يحتوي على متحويلين في قسم ال private هما العددين ويحتوي على Method من أجل ال Add ويحتوي على Method من أجل ال SetNum1 و SetNum2 ..
تصور أن هذا الكلاس تريد تطبيقه على نوع Integer وعلى نوع Real وعلى نوع Word .. فكيف سوف تحقق هذا ..؟؟
في السي++ وليس السي يمكن أن تبرمج قالب كلاس يقبل أي نوع هذا اسمه Template Class وهي مثلا على الشكل التالي :
template
class MyClass {
public:
T Add();
void SetNum1(T value);
void SetNum2(T value);
private:
T num1;
T num2;
};الكود السابق هو فقط للتصريح عن الكلاس ولاحظ أنني استخدمت نوع T وهو مايعطيه المبرمج مثلا إذا أردت الكلاس السابق من نوع integer أكتب التصريح التالي :
MyClass intclass_variable;
وإذا أردته float أو Real Number أكتب :
MyClass floatclass_variable;
ويقوم مترجم السي++ بشكل آلي بعملية بناء كلاس من أجل ال int وكلاس من أجل ال float ..
أرجو أن يكون الشرح واضح وأشكرك ياSUM على اهتمامك باجابة أسئلتي .. :) :)
Coding on the Cloud and for the Cloud!
ياريت توضح اخي العزيز بمتال تام , لاني فهمت فكرة الكلاس و لكن لو توضح فكرة استخدامه اكتر .
يوجد في الدلفى نوع اسمه variant , يستطيع ان يكون ياخد انواع مختلفة من البيانات .
وياريت توضحنا اكتر حتى تعم الاستفادة لجميع .
وشكرا
السلام عليكم
هذه محاولة لبناء كلاس باستخدام المتغير variant
type
TmyClass = class
private
v1,v2 : variant;
public
procedure setnum(a1,a2 : integer); overload;
procedure setnum(a1,a2 : real); overload;
function getsum:variant;
end;procedure TmyClass.setnum(a1,a2 : integer);
begin
v1 := a1;
v2 := a2
end;
procedure TmyClass.setnum(a1,a2 : real);
begin
v1 := a1;
v2 := a2
end;
function TmyClass.getsum:variant;
begin
Result := v1 + v2
end;var i : integer;
r : real;
vi, vr : TmyClass;
begin
vi := TmyClass.create;
vi.setnum(2,3);
i := integer(vi.getsum);
vr := TmyClass.create;
vr.setnum(2.1,3.5);
r := real(vr.getsum);
end;أتمنى أن أكون قد ساعدتك يا أخ هاني
تحياتي (f) (f) (f)
أخ هاني جرب هذه الوصلة:
http://community.borland.com/article/0,141...0,27603,00.html
أخ fsl طريقتك تنفع ولكنها غير عملية لأنها تحتاج إلى cast في كل مرة للوصول إلى المعطيات .
أخ محمد أشكرك جدا على هذا الوصلة فعلا هذا الذي كنت أريده . بصراحة ماكنت متوقع أن الدلفي ممكن أن يتم بها بناء ال Template ولكن على كل الأحوال تبقى عملية ملعوبة ..
:) :)
Coding on the Cloud and for the Cloud!
أخ هاني مع ظهور دلفي 1 قال أحد الخبراء
With Delphi sky is your limit
:) :)
شكراً لك يا أخ محمد
كلما أزداد معرفة بالدلفي أتساءل لماذا لم تنل الاهتمام الذي تستحقه :)
شكراً لك مرة أخرى
هذا الموضوع مغلق.