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

سؤال عن static

مغلق
بدأه السهم الناري في 29 يونيو 2003 · 10 رد · 834 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لقد عرفت ماهي البينات والاجراءت الساكنه static ولكن الذي لم أفهمه متى استخدمها وياليت مثال عملي مبسط يحل مشكلة بالstatic ..ز

بأختصار متى يفضل جعل البينات static ساكنه مع مثال ..

أسف جدا تعبتكم معاي بكثرة أسألتي...

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#2

إن استخدام 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

طبعاً هناك استخدامات أخرى لكن هذا ما لدي الآن

#3

معلومة على الطاير;)

الدوال في الكلاس عامة لكل أعضاء الكلاس

بخلاف المتغيرات حيث كل ماتعرف كائن من هذا الكلاس فله المتغيرات الخاصة به

ولكن إذاكان المتغير من نوع ساكن فإنه يكون على مستوى الكلاس مثل الدوال ويمكن إسناد قيم له وللدوال الساكنه من غير أن نعرف كائن بخلاف الدوال الغير ساكنة

مع خالص المحبة الأخوية لكل الأخوة

والسللللااااااااااااااامممممممممممم

(f)

#4

ال static يعرف في الكلاس مما يعني ان قيمة هذا المتغير صالحة لكل الكائنات من هذه الكلاس واذا تم تغيير قيمته في اي كائن فان هذا التغير يصير شاملا لكل الكائنات الأخرى

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#5
#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();
}
اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#6

وفقك الله أخي

ماشاء الله برنامج ممتاز

:D:D:D

#7

الحمد لله و الشكرلله

ترقيت سرت عضو

الأيام تمر سريعاً

#8

أولا شكرا لاخوتي الاعزاء .

ثانيا الذي فهمته منكم أن البينات الساكنه يشترك فيها جميع الكائنات بعكس البينات الخاصة التي كل كائن له بيناته الخاصة به..

وأيضا فهمت أنه يمكننا استدعاء الاجراء " الدالة " بدون الحاجة الى انشاء object من class وذلك بالاستدعاء الصريح كما ذكر في برنامج الاخ اسماعيل..

ولكن الا تتوقعون أنه يمكننا عما استدعاء صريح لكل الدوال بغ النظر عن كونها static وذلك بالاستدعاء الصريح بذكر اسم الكلاس متبوعا بأربع نقط ثم اسم الاجراء..

جزاكم الله خير...

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#9

اذا كان الأستدعاء داخل ألأبنا فممكن وفي حالة implement ولا يمكن الأستدعاء اثناء التنفيذ

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#10

ياأخي الstatic يخزن مكانه اثناء الcompiler time ومن هنا يمكنك التعامل معها دون إنشاء كائن

بخلاف الغير ساكن ينشأ أثناء الrun time

وكلامك منطقي جدا لعل هذا السبب في كون الدوال الغير ساكنة لايمكن التعامل معها إلا بكائن

والله تعالى أعلم

#11

ماهو المقصود ب implement وشكرا لتوضيح.........

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

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

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