الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن كيفية بناء كلاس لجميع ال data types

مغلق
بدأه هاني الأتاسي في 28 نوفمبر 2001 · 9 رد · 860 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

على فرض أريد أن أبني كلاس للمكدس stack . أريد أن أستخدم هذا الكلاس نفسه لأكثر من نوع من المعطيات مثلا مرة لل Int ومرة لل Float وهكذا ..

فما هي أحسن طريقة لفعل ذلك ...

يوجد في السي++ مايسمى بال template .. بصراحة أريد أن أعمل متلها ..

Coding on the Cloud and for the Cloud!

My Blog

#2

ياريت توضح بمتال .. بلغة c

وشكرا

#3

اهلاً وسهلاً بك اخي هاني

الصحيح مالك شوفات :) وين الناس

على العموم

ممكن لو توضح سؤالك اكثر

وفي الختام تقبل اطيب تحياتي اخوك SUM

#4

تخيل أنه لديك كلاس يجمع عددين .. هكذا فقط يجمع عددين .. يحتوي على متحويلين في قسم ال 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!

My Blog

#5

ياريت توضح اخي العزيز بمتال تام , لاني فهمت فكرة الكلاس و لكن لو توضح فكرة استخدامه اكتر .

يوجد في الدلفى نوع اسمه variant , يستطيع ان يكون ياخد انواع مختلفة من البيانات .

وياريت توضحنا اكتر حتى تعم الاستفادة لجميع .

وشكرا

#6

السلام عليكم

هذه محاولة لبناء كلاس باستخدام المتغير 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)

#8

أخ fsl طريقتك تنفع ولكنها غير عملية لأنها تحتاج إلى cast في كل مرة للوصول إلى المعطيات .

أخ محمد أشكرك جدا على هذا الوصلة فعلا هذا الذي كنت أريده . بصراحة ماكنت متوقع أن الدلفي ممكن أن يتم بها بناء ال Template ولكن على كل الأحوال تبقى عملية ملعوبة ..

:) :)

Coding on the Cloud and for the Cloud!

My Blog

#9

أخ هاني مع ظهور دلفي 1 قال أحد الخبراء

With Delphi sky is your limit

#10

:) :)

شكراً لك يا أخ محمد

كلما أزداد معرفة بالدلفي أتساءل لماذا لم تنل الاهتمام الذي تستحقه :)

شكراً لك مرة أخرى

هذا الموضوع مغلق.

مواضيع مشابهة