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

Static Var. In Oop

بدأه tracy في 4 نوفمبر 2009 · 5 رد · 641 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

بدأنا في دراسة البرمجة الموجهة بالسي ++، مفاهيمها سهلة.. لكن بها أشياء تحتاج للتوضيح

الخلاصة: مطلوب مني كتابة برنامج كالتالي:

1- كتابة كلاس تحتفظ بأرراي من نوع (int arr [5])

بالإضافة لداتا ممبر آخر، يعرف عدد الأرقام التي خزنت داخل الأراي..

بالنسبة لهذه النقطة، فقد كتبت الكود كالتالي:

class Numlist {

private:

int arr [5];

public:

//static int* num = 0;

//num = &arr[5];

//for (int i = 0; i <= num; i++)

// cout << i << " ";

Numlist (int size, int values){

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

cout << arr << " ";

}

Numlist();

void display (){

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

cout << arr << " ";

}

};

بالإضافة طبعًا للفانكشن display

التي تظهر الأرقام التي خزنت في الأرراي

2- كتابة global function

تقوم بنفس وظيفة الفانكشن display

وذلك عن طريق call display function

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

void f (int Numlist1){

void display (){

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

cout << arr << " ";

}

display (Numlist1);

}

بالإضافة لأجزاء أخرى في البرنامج... لكن ما حيرني حقًا هو

كيف أكتب الداتا ممبر اللي بيحسب عدد الأرقام في الأرراي،

فكتبتها باستخدام البوينتر، لكن طبعًا فشلت فيها

وكمان كل ما أحاول أرن البرنامج، يطلعلي إيرور بأن الفانكشن display

مش معرفة في سكوب الفانكشن f

فأرجو منكم حقًا أن تساعدوني، حتى أفهم الموضوع....

وبجد، جزاكم الله خيرًا جميعًا على مجهوداتكم

تم تعديل هذه المشاركة بواسطة tracy في 4 نوفمبر 2009 في 10:46

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#2

لماذا انت معقد ال class وليش ال num مؤشر ، وثانياً كيف بدك تدخل البيانات ؟؟؟

يجب ان تضع داله للادخال

وانت فعلاً لا تحتاج static اعمل اي int و بال constractor اجعله 0

وهذا محاوله لي لعمل البرنامج :

#include<iostream>
#include<conio.h>
using namespace std;

class Numlist {
private:
int arr [5];
int num;
public:
	Numlist(){num =0;}
	void Insert(int Number)
	{
		if(num<5)
		{
			arr[num]=Number;
			num++;
		}
		else
			cout<<"Array Full";

	} 
	int used(){return num;}

	void display ()
	{
	for (int i = 0; i<num; i++)
	cout << arr << " ";
	cout<<endl;
	} 
};

void main()
{
	Numlist A;
	cout<<"I Used "<<A.used()<<" from the array\n";
	A.Insert(5);
	A.Insert(7);
	A.display();
	cout<<"I Used "<<A.used()<<" from the array\n";
	A.Insert(7);
	A.Insert(7);
	A.Insert(7);
	A.Insert(2);
	A.Insert(7);
	A.Insert(7);
	A.display();
	cout<<"I Used "<<A.used()<<" from the array\n";
	getch();
}
#3

جزاكم الله خيرًا أخي، وأكرمكم الله...

هو بس في مشكلة بسيطة، الدكتور حددت الممبر فانكشن باتنين بس:

constructor & display

بالإضافة لـ global function (f)

وفي آخر البرنامج طلبت منا تعديل الـ static array إلى dynamic array

ليحتفظ بعدد غير محدد من الأرقام...

لذلك سنقوم بعمل destructor

فهذا هو كل المطلوب منا.. فهل يمكنني تجميع هذه الـ functions اللي حضرتك كتبتها كلها

في الكلاس ؟ ولا مش هينفع؟؟؟

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#4

لا هينفع

بس المشكله انهم غير كافيات

يعني انت كيف تدخل بيانات لل array ؟؟

اما عن تحويلها dynamic هو امر بسيط

ام انك تريد تدخل البيانات من خلال ال constractor ؟

اما عن ال global function فلا تعرف جسم display بداخلها ، يمكنك عمل pointer to function بداخلها ولكن اعتقد انه امر غريب شوي لانك سوف ترسل ايضاً ال object نفسه كمتغير من متغيرات الداله لان البيانات من نوع private .

اعتقد ان الدكتور يمكن مستخدم ال array على انها public ؟؟

تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 4 نوفمبر 2009 في 19:11

#5

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

يبدو يا أخي أني مش مستوعبة أوي للمطلوب،، لكن هذا هو المكتوب:

(Another data member of the class indicates, how many numbers are currently stored in the number list)

فهمت من هذا السطر أن المطلوب مني عمل داتا ممبر يحسب عدد الأرقام في الأرراي وليس قيمتها....

فهل فهمي صحيح؟

بالإضافة لإجابة سؤال حضرتك، فنعم... الدكتور فعلاً عاوزانا نخزن الأرراي على انه public

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#6

بلإضافة أيضًا للـ global function (f)

عرفتها قبل الـ main هكذا:

void f (Numlist);

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

void f (Numlist n){

Numlist n2;

display (Numlist n1);

}

الكومبايلر اعترض، وكتبلي الآتي:

() no matching function for call to `Numlist::Numlist

candidates are: Numlist::Numlist(const Numlist&)

وعلى حسب فهمي، هذه الطريقة نستخدمها فقط عند مناداة copy constructor

أفيدوني يا أهل الخير أكرمكم الله ..

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

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