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

سؤال عاجل ..لماذا تتغير القيم بعد الخروج من ال constructure؟؟

مغلق
بدأه data_data في 10 ديسمبر 2002 · 3 رد · 494 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله .

سؤالي : لدي برنامج بال c++ وفيه الكلاس المسماة Graph وفيه constructure لإعطاء القيم الإبتدائية.

وهذا الجزء الذي فيه تعريف الكلاس وال constructure :

 class Graph

{

private:

	Vertex VertexList[MAX];

	int adjMat[MAX][MAX];

	int nVerts;



public:





 Graph() //this is the constructure

	{

  Vertex VertexList[MAX];

    int adjMat[MAX][MAX];

  nVerts=0;

  for(int i=0;i<MAX;i++)

 	 for(int j=0;j<MAX;j++)

    adjMat[j]=0;  //initialize the matrix

	} //end constructure

وباستخدام ال watch تأكدت ان المصفوفة adjMat[][] يتم تصفيرها داخل الconstructure .

وفي ال main أقوم في البداية بتعريف اوبجكت من نوع الكلاس .أي ان المصفوفة يتم تصفيرها وتأكدت من ذلك.

وفي أثناء البرنامج يتم بعض قيم هذه المصفوفة واستبدالها بقيم أخرى في حين تظل بعض القيم مصفرة كما هي (مع العلم انه من الضروري أن تظل القيم التي لم اغيرها مصفرة لأنني أحتاج لذلك).

وهناك member function وظيفتها هي عرض هذه المصفوفة .

وكتبتها كالتالي:

void displayMat(int j,int k)

 {

  cout<<adjMat[j][k];

  cout<<" ";

 }

يتم مناداتها في هذا الجزء داخل ال main :

for(int j=0;j<num;j++) //to display adjMat.

            {

             cout<<endl;

             for(int k=0;k<num;k++)

             G.displayMat(j,k);  //G is the object of class Graph.

            }//end for loop

]لكن المشكلة.. هي أنه يتم عرض القيم التي لم أقم بتغييرها بصورة خاطئة (أرقام عشوائية من الذاكرة بدلا من الأصفار).

لذلك أرجو منكم أن تخبروني ..هل هناك خطوة يجب أن أعملها ؟؟؟ وما هو الخطأ؟؟؟ لماذا لا تظهر القيم بأصفار؟؟؟

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

وشكرا جزيلا مقدما.

#2

السلام عليكم ,,,

أختي data_data:

الامر طبيعي و بسيط جدا أختي وهو أنك قمتي بتعريف

int adjMat[MAX][MAX];

مرة أخرى داخل الـ constructure مما أدى إلى تصفير هذا المتغير

و بقي المعرف في الكلاس اعلاه ذو قيم عشوائية :)

كل ما عليك فعلاه هو أن تكتبي علامة // قبل هذا التعريف في الـ constructure

ليصبح الـ constructure كالتالي:

Graph() //this is the constructure

	{

   //	int VertexList[MAX];

   //	int adjMat[MAX][MAX];

  nVerts=0;

  for(int i=0;i<MAX;i++)

 	 for(int j=0;j<MAX;j++)

    adjMat[j]=0;  //initialize the matrix

	}

و الان كل شيئ يعمل 100% ;)

حظ موقف يا رب :)

تحياتي ,,, طلال.

#3

(f)(f)(f)

يعطيك العافية أخ طلال..وجزاك الله ألف خير.

#4

السلام عليكم ....

الحمد الله انه حلت مشكلتك، عندي فقط نصيحة لك عند كتابتك لأي كلاس، وهو ان تبدأ أسماء اي عضو variable member في الكلاس بـ _m ، على سبيل المثال:

int m_adMem;

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

تقبل تحياتي ...

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…