عيون العرب - ملتقى العالم العربي

العودة   عيون العرب - ملتقى العالم العربي > ~¤¢§{(¯´°•. العيــون الساهره.•°`¯)}§¢¤~ > أرشيف المواضيع الغير مكتمله او المكرره او المنقوله و المخالفه

أرشيف المواضيع الغير مكتمله او المكرره او المنقوله و المخالفه هنا توضع المواضيع الغير مكتملة او المكرره في المنتدى او المنقوله من مواقع اخرى دون تصرف ناقلها او المواضيع المخالفه.

 
 
LinkBack أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 01-27-2010, 06:31 AM
 
درس القوالب Templates-الدرس الأول

بسم الله الرحمن الرحيم

أقدم هذا الدرس المهم جدا في البرمجة الغرضية التوجه object - oriented programming سنتكلم عن القوالب templates .

القوالب هي طريقة اختصارية للتحميل الزائد وتوفر لنا الوقت والجهد من كتابة تحميل زائد لأي دالة .
قبل ان ندرس القوالب على البرمجة الغرضية التوجه OOP سنقوم بدراستها على الدوال (التوابع - الوظائف) Function لكي نوضح آليه عملها والفائدة المرجؤة من ذلك .

Chapter -1


للتصريح عن قالب معين نستخدم الكلمة class او نستخدم الكلمة typename
مثال:
كود HTML:
template<class T>
أو :
كود HTML:
template<typename T>
بهذه الطريقة نكون قد صرحنا عن قالب T يمثل نوعية النمط المستخدم لاحقا .
عند استخدام T كوسيط في أي دالة سيكون عبارة عن وسيط وهمي ! .
ويتسبب عدم كتابة الكلمة class او الكلمة typename قبل نمط كل وسيط وهمي ظمن قالب لدالة ما بحدوث خطأ قواعدي !! .

سنقوم الان بإنشاء دالة array تأخذ وسطين أحدهما مصفوفة والاخر عدد يمثل عدد عناصر المصفوفة , تقوم الدالة بطباعة العناصر كلا بصف مستقل .
كود HTML:
#include<iostream>
using std::cout;
using std::endl;

template<class T>
void array(T *x,int a)
{
        for(int i=0;i<a;i++)
        cout<<x[i]<<endl;
}
main()
{
        int x[]={1,2,3,4,5};
        double y[]={1.5,2.5,1.9,1.4};
        char z[]="Template";

        array(x,(sizeof(x)/4));
        array(y,(sizeof(y)/8));
        array(z,sizeof(z));
        return 0;
}

نلاحظ من خلال المثال السابق بأن المخرجات ستكون
1
2
3
4
5
1.5
2.5
1.9
1.4
T
e
m
p
l
a
t
e

هكذا نكون قد اوضحنا آلية عمل القوالب على الدوال , يتبقى لنا الان ان نعرف كيفية استخدامها على الصفوف .
Chapter -2
من خلال المثال التالي , سنقوم بتصميم صف (صنف,فئة)class سنسميه Ali سيحتوي على دالة print تأخذ وسيط وهمي (قالب) وتقوم بطباعته على حسب عدد المرات والتي يتم تحديدها عند اشتقاق غرض من الصف (اي عن طريق دالة البناء).
تقوم الدالة Sure بالتأكد من ان عملية الطباعة ماتزال مستمرة , أي انها تعيد قيمة bool من خلالها تساوي احد المعطيات(متغير خاص) بالمطعى الخاص بأخذ العدد المطلوب لتكرار عملية الطباعة والذي يتم اعطائة القيمة بواسطة تابع البناء .
كود HTML:
#include<iostream>
using namespace std;
template <class T>
class Ali
{
public:
        Ali(int=1);
        bool print(T);
        bool Sure()
{
        return y==x;
}
private:
        int x;
        int y;
};
template<class T>
Ali<T>::Ali(int a):x(a),y(0){}

template<class T>
bool Ali<T>::print(T a)
{
        if(!Sure())
        {
                cout<<a<<endl;
                y++;
                return true;
        }
        else
                return false;
}

main()
{
        Ali<int> i(3);
        Ali<double> d(2);
        Ali<char*> c(4);





        while(i.print(15)){}
        while(d.print(15.50)){}
        while(c.print("Ali")){}


        return 0;
}
ستكون المخرجات : تكرار العدد الصحيح 15 ثلاث مرات , ايضا تكرار العدد المضاعف 15.5 مرتين , ايضا تكرار كلمة Ali اربع مرات .

الدوال مع قالب الصف
Chapter -3
سنقوم الان باستخدام الصف السابق بكتابة برنامج جديد .
سنوضح من خلال هذا البرنامج كيفية عمل القوالب مع الدوال التي يكون احد وسطائها قالب صف.
يحتوي البرنامج على دالة fun تأخذ وسيطين الأول غرض من صف Ali والوسيط الثاني سيكون وسيط وهمي لنوع من البيانات .
كود HTML:
#include<iostream>
using namespace std;
template <class T>
class Ali
{
public:
        Ali(int=1);
        bool print(T);
        bool Sure()
{
        return y==x;
}
private:
        int x;
        int y;
};
template<class T>
Ali<T>::Ali(int a):x(a),y(0){}

template<class T>
bool Ali<T>::print(T a)
{
        if(!Sure())
        {
                cout<<a<<endl;
                y++;
                return true;
        }
        else
                return false;
}
template<class T>
void fun(Ali<T> &m,T a)
{
        while(m.print(a))
        {}
}


main()
{
        Ali<int> i(3);
        Ali<double> d(2);
        Ali<char*> c(4);






        fun(i,15);
        fun(d,15.50);
        fun(c,"Ali");
        return 0;
}
ستكون المخرجات ايضا :تكرار العدد الصحيح 15 ثلاث مرات , ايضا تكرار العدد المضاعف 15.5 مرتين , ايضا تكرار كلمة Ali اربع مرات .

Chapter -4
نقوم اولا بتعريف الصف class بأنه "قالب صف" والذي يسمى بالمكدس Stack بواسطة تعريف القالب , يقوم المترجم بواسطة نص برمجي غير ظاهر للمستخدم او المبرمج بتعريف النمط T على انه النمط المرفق عند اشتقاق الغرض مثلا int او double بالنسبة للدوال داخل الصف يتم تعريف الدوال التي تأخذ وسيط وهمي "قالب" خارج تعريف الصف وباستخدام العملية الثنائية :: مع اسم القالب الصف
كود HTML:
Ali <T>
لكي نحدد مجال الرؤية لتعريف الدوال الخاصة بالمكدس .

في main نقوم باشتقاق الغرض من الصف Ali كما تعودنا ولكن يجب تحديد نوعية النمط للمكدس ليتم التعامل معه مستقبلاً .

بهذا اكون قد انهيت الدرس الأول .
اتمنى ان يكون قد حاز على رضاكم واستحسانكم .
تقبلوا تحياتي
منقول
__________________
angel4angel4angel4angel4angel4
 

مواقع النشر (المفضلة)


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الأول لتعليم اللغه الأنجليزيه عبده الشلبى تعلم اللغة الانجليزيه 5 10-03-2010 11:19 AM
الدرس الأول .. تعلم اللغة الفرنسية فارس عيون العرب معهد تعلم لغات العالم 21 08-27-2010 08:37 PM
حروف اللغة العربية الدرس الأول محمد البطّاح معهد تعلم لغات العالم 4 07-03-2010 07:38 PM


الساعة الآن 06:44 AM.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

شات الشلة
Powered by: vBulletin Copyright ©2000 - 2006, Jelsoft Enterprises Ltd.
جميع الحقوق محفوظة لعيون العرب
2003 - 2011