لقد عرفت ماهي البينات والاجراءت الساكنه static ولكن الذي لم أفهمه متى استخدمها وياليت مثال عملي مبسط يحل مشكلة بالstatic ..ز
بأختصار متى يفضل جعل البينات static ساكنه مع مثال ..
أسف جدا تعبتكم معاي بكثرة أسألتي...
لقد عرفت ماهي البينات والاجراءت الساكنه static ولكن الذي لم أفهمه متى استخدمها وياليت مثال عملي مبسط يحل مشكلة بالstatic ..ز
بأختصار متى يفضل جعل البينات static ساكنه مع مثال ..
أسف جدا تعبتكم معاي بكثرة أسألتي...
اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم
سبحان الله وبحمده سبحان الله العظيم
لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).
إن استخدام static يعتمد على المسألة المطروحة ويمكن استخدامها مع المتحولات والتوابع .
استخدامها مع المتحولات :
#include <iostream.h>
void go()
{
static int i = 0;
i++;
cout << i << endl;
}
void main()
{
go();
go();
go();
}برأيك ما هي نتيجة تنفيذ البرنامج ؟
النتيجة هي طباعة :
1
2
3
لأن i تم تعريفها بـ static int
استخدامها مع التوابع في الـ class :
#include <iostream.h>
class go
{
public:
static void Hello()
{
cout << "Hellon";
}
};
void main()
{
go::Hello();
}لاحظ أننا نستطيع استدعاء التابع Hello مباشرة بدون إنشاء متحوا من النوع class
طبعاً هناك استخدامات أخرى لكن هذا ما لدي الآن
معلومة على الطاير;)
الدوال في الكلاس عامة لكل أعضاء الكلاس
بخلاف المتغيرات حيث كل ماتعرف كائن من هذا الكلاس فله المتغيرات الخاصة به
ولكن إذاكان المتغير من نوع ساكن فإنه يكون على مستوى الكلاس مثل الدوال ويمكن إسناد قيم له وللدوال الساكنه من غير أن نعرف كائن بخلاف الدوال الغير ساكنة
مع خالص المحبة الأخوية لكل الأخوة
والسللللااااااااااااااامممممممممممم
(f)
ال static يعرف في الكلاس مما يعني ان قيمة هذا المتغير صالحة لكل الكائنات من هذه الكلاس واذا تم تغيير قيمته في اي كائن فان هذا التغير يصير شاملا لكل الكائنات الأخرى
#include
#include
class Person2
{
static int count;
private:
char Name[20];
int ID;
public:
static void initCount();
Person2(char* name);
char* GetName();
int GetCount();
int GetID();
void outdata();
};
int Person2::count=0;
Person2::Person2(char* name)
{
strcpy(Name,name);
ID=++count;
}
char* Person2::GetName()
{ return Name;}
Person2::GetID()
{
return ID;
}
int Person2::GetCount()
{
return count;
}
void Person2::outdata()
{
cout<}
void Person2::initCount()
{
count=0;
}
void main()
{
Person2 p1("Khaled");
Person2 p2("Al Sahm Alnari");
Person2 p3(" Ismael");
p1.outdata();
p2.outdata();
p3.outdata();
}وفقك الله أخي
ماشاء الله برنامج ممتاز
:D:D:D
الحمد لله و الشكرلله
ترقيت سرت عضو
الأيام تمر سريعاً
أولا شكرا لاخوتي الاعزاء .
ثانيا الذي فهمته منكم أن البينات الساكنه يشترك فيها جميع الكائنات بعكس البينات الخاصة التي كل كائن له بيناته الخاصة به..
وأيضا فهمت أنه يمكننا استدعاء الاجراء " الدالة " بدون الحاجة الى انشاء object من class وذلك بالاستدعاء الصريح كما ذكر في برنامج الاخ اسماعيل..
ولكن الا تتوقعون أنه يمكننا عما استدعاء صريح لكل الدوال بغ النظر عن كونها static وذلك بالاستدعاء الصريح بذكر اسم الكلاس متبوعا بأربع نقط ثم اسم الاجراء..
جزاكم الله خير...
اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم
سبحان الله وبحمده سبحان الله العظيم
لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).
اذا كان الأستدعاء داخل ألأبنا فممكن وفي حالة implement ولا يمكن الأستدعاء اثناء التنفيذ
ياأخي الstatic يخزن مكانه اثناء الcompiler time ومن هنا يمكنك التعامل معها دون إنشاء كائن
بخلاف الغير ساكن ينشأ أثناء الrun time
وكلامك منطقي جدا لعل هذا السبب في كون الدوال الغير ساكنة لايمكن التعامل معها إلا بكائن
والله تعالى أعلم
ماهو المقصود ب implement وشكرا لتوضيح.........
اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم
سبحان الله وبحمده سبحان الله العظيم
لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).
هذا الموضوع مغلق.