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

سؤال حيرني حول ال class

مغلق
بدأه mr.4one في 2 أغسطس 2010 · 3 رد · 449 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته .. "

كنت اشوف اني فاهم الـ class ولكن للاسف تفاجات اني فاهم النصف .."

وعندي اسئله بسيطه ..

عند الوصول الى المتغيرات الساكنه لماذا هي ليست مثل المتغيرات الباقيـه .. لا يتم استدعائها من الـ الدوال الخاصه بالكلاس .. او ان نضع لها داله بناء تبـدا من 0 او الـخ ..

وهذا مثـال ( وهو خاطئ ..)

#include <iostream.h>

class node{
private:
	static int x;
public:
	void fit();
};

node::node()
{
	x=0;
}


void node::fit ()
{
	x++;
	cout<<x;
}
void main()
{
	node a;
	a.fit();
}

واعرف الحـل انه هذا .. ولكن لا اريد ان يكون التعريف عام ..!! بهذه الطريقه اريده ان يكون في داله بناء مثـلا .!!!!

ولماااذا .. اهم شي انه لماذا الشفيره السابقه ليست صحيحه ..!!

وهذا هو الصحيح ..

#include <iostream.h>

class node{
private:
	static int x;
public:
	void fit();
};


int  node::x = 0;


void node::fit ()
{
	x++;
	cout<<x;
}
void main()
{
	node a;
	a.fit();
}

واتمنى الاجابه على لماذا ..!!

وسؤال اخــر ..

ماهي الدوال الاعضاء الساكنه .. وهذا مثــال

static func_ex(){ return x}

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 2 أغسطس 2010 في 18:53 — السبب: يعالم حرااااااام، استخدموا تاج الكود

#2
اقتباس

واعرف الحـل انه هذا .. ولكن لا اريد ان يكون التعريف عام ..!! بهذه الطريقه اريده ان يكون في داله بناء مثـلا .!!!!

ولماااذا .. اهم شي انه لماذا الشفيره السابقه ليست صحيحه ..!!

لا أعتقد أن المتغير أصبح Global لآنك مصرح به في داخل الكلاس و هو Private

السبب لآنه في كل مرة يصبح فيها هدم للobject المتولد من الكلاس يجب أن تسند قيمة العنصر الستاتيكي إلى حجرة ذاكرية خارج منطقة الكلاس " لآن الستاتيك هو نفس الجلوبال لكنه في منطقة مدى رؤية معينة "

1
#3
اقتباس
ولماااذا .. اهم شي انه لماذا الشفيره السابقه ليست صحيحه ..!!

عند تعريفك لمتغير بالكلمه static داخل فئه فهذا يعنى انه مشترك بين كل نسخ الكائنات التى سيتم انشائها من هذه الفئه و فى مثالك المتغير x قيمته واحده لكل الكائنات المنشئه من الفئه node، فى هذه الحاله يمكنك اعتبار الفئه node هى مجرد scope لأيس إلا و للوصول للمتغيرات التى تحويه ستحتاج لإستخدام الـ scope resolution للوصول لهم.

النقطه "." يتم استخدامها للوصول للمتغيرات التى يتم تعريفها بدون static حيث يتم انشاء نسخه لكل منهم مع كل متغير اما المتغيرات الـ static فلا.

اقتباس
ماهي الدوال الاعضاء الساكنه

يمكنك اعتبار هذا النوع من الدوال يقوم بعمليات عامه على الفئه و لكنه لا ينتمى لأحد الكائنات المنشئه من هذه الفئه، مثلا انظر الكود التالى:

class File
{
public:

    static File Open(string fileName)
    {
     ..
     ..
     ..
    }

}

الداله Open تقوم بفتح ملف، هذه الداله ليس من المنطقى ان تتبع كائن معين من الفئه بمعنى انه لن يكون من المنطقى كتابة كود كالتالى:

File f1();

File f2 = f1.Open("c:\test.txt");

الكود السابق ليس منطقى و لهذا لابد من الداله Open أن تكون ملك للفئه و ليس لأحد الكائنات الخاصه بالفئه.

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#4

يعطيكم الف عافيه جميعــا..

ولكن بما ان المتغير الساكن.. لجميع الكائنات (بنفس القيمه ) لماذا لم لايمكن عمل داله بناء لها ..!!

أي ان عند انشاء كائن .. تكون القيمه صفر تلقائي من داله البناء للكائن .. و scope الكائن ع ماظن على حدود الكلاس فقط..

---------

والي فهمته ان الدوال التي تسبقها ..static هي دوال تقوم بعمليات عامه ..كـ فتح ملف كما ذكرت وكا عمل وظائف لاتحتاج الى تمرير اليها بارومترات ..!!

وشكــرا اخواني

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

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