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

أمر new في c++ ؟؟

مغلق
بدأه k.f.u في 23 فبراير 2006 · 17 رد · 1,679 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي سؤالين ..

1- متى يستخدم أمر new في c++ ??

2- غالبا في c++ اذا أردنا الاعلان عن مصفوفه نكتب الاسم ونوع العناصر وعددها ..

أريد طريقه لتحديد عدد عناصر المصفوفه أثناء التنفيذ وليس أثناء الاعلان ؟؟؟

بانتظاركم ..

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

تم تعديل هذه المشاركة بواسطة k.f.u في 23 فبراير 2006 في 20:08

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

samp8a5b2fc47732a301.jpg

#2

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

أخي لو بحثت لكان أفضل لي ولك

السؤال الأول :

نستخدم الأمر NEW عندما نريد أن نعمل حجز للذاكره لOBJECT نريد انشائه

مثلا أنشأت CLASS يسمى STUDENT

عندما تريد أن تنشأ OBJECT جديد وتضع به قيم تستخدم NEW

مثلاً STUDENT S = NEW STUDENT()

بهذا حجز في الذاكره بعدد الخصائص للكلاس STUDENT

السؤال الثاني

لغة السي ++ ماتسمحلك بأن تجعل المصفوفه غير معلن عنها ببداية تعريفها بعكس الVICTOR

لابد أن تحدد طول المصفوفه قبل استخدامها ويكون إما رقم مثل 10

أو متغير ثابت CONSTANT

ثم استخدم المصفوفه بعدد المدخلات التي تريدها

#3

كلمة new تستخدم لحجز مساحة من الذاكرة اثناء تشغيل البرنامج, مثلا لحجز مصفوفة ارقام ذات عشر عناصر:

int * x = new int[10];

لاحظ ان x عبارة عن مؤشر .. السبب في ذلك هو قصور في السي بلص بلص, حيث الطريقة الوحيدة للاشارة الى الذاكرة الجديدة هي عن طريق مؤشر الى بداية المصفوفة الجديدة.

#4

والله كنت كتبت مشاركة من شوية , ماعرفش راحت فين :s

عموما هي كانت تعليق على كلام عيسى

اقتباس
لغة السي ++ ماتسمحلك بأن تجعل المصفوفه غير معلن عنها ببداية تعريفها بعكس الVICTOR

لابد أن تحدد طول المصفوفه قبل استخدامها ويكون إما رقم مثل 10

أو متغير ثابت CONSTANT

ثم استخدم المصفوفه بعدد المدخلات التي تريدها

انظر هنا

#5

أين القصور يا أخ حسـن

#6

تستخدم الحجز (الديناميكي) للذاكرة عندما لا تعرف مُسبقاً (حجم) البيانات التي تريد إستخدامها في برنامجك في الوقت الفعلي runtime .

تستطيع استخدام الكائن Vector من المكتبة STL فهو موسع و به إمكانات للبحث و الحذف ..إلخ .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#7

أهلين أحبابي ........ شكرا للاهتمامكم بالموضوع

الاخ / الاخت Asm4all

ممكن توضيح أكثر لهذا الكود

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {

int n;

cin >> n;

int array1[n][n];

return 0;

}

ومالفرق بين void main , int main

وجزاك الله خير ...للانني أحتاج الشرح ضروري ,,,

الاخ أحمد صالح

أخي الكريم ممكن توضيح اكثر للاجابه .... هل تقصد السؤال الاول ام الثاني في ردك ؟؟؟

شكري وتقديري

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

samp8a5b2fc47732a301.jpg

#8
k.f.u كتب:
أهلين أحبابي ........ شكرا للاهتمامكم بالموضوع

الاخ / الاخت Asm4all

ممكن توضيح أكثر لهذا الكود

ومالفرق بين void main , int main

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

الاخ العزيز

النوع الذي يكون قبل اسم الداله ^بشكل عام لكل الدوال^

يحدد انه هناك قيمه معينه سترجعها الداله و تاخذ هاذ الداله هذه القيمه عند ترجمتها وتكون من النوع الذي كتبته قبل اسم الداله

علي سبيل المثال الداله int main

فانه من الممكن تعريف متغير من نوع int

و بعد ذلك تكتب c = main;

هذا يعني ان المتغير c لديه الان القيمه المعاده من الدالهmain

بالنسبه للدوال التي تنتهي ب void

فلا يكون هناك فيمه معاده من الداله

اي انك تخبر المترجم انه لاتوجد قيمه لهذه الداله بعد الترجمه

و لهذا تخلو من الكلمه RETURN

ارجو ان تكون الفكره وضحت وانا مستعد لاي سؤال

اخوك هاني

#9

لا أعتقد أن استدعاء الدالة main مسموح به في السي بلس بلس ؛ هكذذا:

c=main

حيث c متغير .....

بالنسبة للفرق بين الدالة void main والدالة int main :

فالثانية هي الطريقة القياسية المعتمدة ؛ وهي تعيد قيمـة .... فإذا أعادت القيمة صفر فإنك تخبر نظام التشغيل أنه لا يوجد أي خطأ في البرنامج .. وإذا أعاد البرنامج القيمة 1 فإنك بذلك تخبر النظام أنه يوجد خطأ في البرنامج

تم تعديل هذه المشاركة بواسطة Sultan_Althibity في 24 فبراير 2006 في 03:33

#10
Sultan_Althibity كتب:
لا أعتقد أن استدعاء الدالة main مسموح به في السي بلس بلس ؛ هكذذا:

c=main 

حيث c متغير .....

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

كلامك صحيح

و لكن الهدف كان توضيح الفكره

اي انه ممكن استخدام القيمه المعاد من الداله

اقتباس
فالثانية هي الطريقة القياسية المعتمدة ؛ وهي تعيد قيمـة .... فإذا أعادت القيمة صفر فإنك تخبر نظام التشغيل أنه لا يوجد أي خطأ في البرنامج .. وإذا أعاد البرنامج القيمة 1 فإنك بذلك تخبر النظام أنه يوجد خطأ في البرنامج

الاصح في هذه الحالات استخدام الكلمه bool

فانها احد التحسينات التي ادخلت من السي علي السي بلس بلس

لانها تقبل فقط القيم اما 0 او 1

اخوك هاني

#11

لأ ؛ ليست الصحيحـة استخدام القيمة bool .. أو هي صحيحـة .... ولكنها ليست المعتـمدة أو القياسيـة .... الشكل القياسي للدالة main أن تكون من النوع int

#12

تصحيح:

جربت هذا الكود قبل قليل وطلع صحيح 100% ...

لأول مرة أعرف أن الدالة main من الممكن استدعائها من دالة أخرى ... لا أعلم إن كانت الطريقة قياسية أو أن الخطأ من مترجم الفيجوال

int fun();
int main()
{
	fun();

	return 0;
}

int fun()
{
	main();
	return 0;
}

تم تعديل هذه المشاركة بواسطة Sultan_Althibity في 24 فبراير 2006 في 04:31

#13
Sultan_Althibity كتب:
أين القصور يا أخ حسـن

واضحة يا عمي :rolleyes:

الطريقة الوحيدة للتعامل مع الـ array في السي بلص بلص هي عن طريق المؤشرات .. و هو قصور لانك تفقد معلومات (بالتحديد, حجم المصفوفة).

اللغات المحترمة (احم) فيها array محترم

int arr[] = new int[size];
print( arr.length );

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 24 فبراير 2006 في 09:25

#14

شكرا للجميع على الاهتمااااااااااام بالموضوع ,,

يعني اللي أنا أبي أوصله ..

أن ممكن أي شخص يحدد عناصر المصفوفه أثناء التنفيذ اذا كتب بالطريقه القياسيه على هذا النحو " int main " صح ؟؟

وياليت من Asm4all أو أي شخص يشرح لي الكود؟؟ اذا سمحتم .

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {

int n;

cin >> n;

int array1[n][n];

return 0;

}

للانه بصراحه هو واجب وأكيد الاستاذ بيسألني فيه اذا كنت فاهمه أو لا ؟؟

ويعطيكم العافيه .......

بانتظاركم

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

samp8a5b2fc47732a301.jpg

#15
اقتباس
و هو قصور لانك تفقد معلومات (بالتحديد, حجم المصفوفة).

همممممممممممممممممممم

والله إذا ضاع على المبرمج حجم المصفوفـة فهذا غباء منـه :P ....

وبعـدين ما هـو الأسرع الأمر اللي في الجافا:

print (arr.length) ;
[\code]
أو الكود اللي يقابله في السي بلس بلس:
[code]
cout << arr.size() ;
[\code]
حيث أن arr هو عبارة عن vector ....
ولكن المشكلة الأساسية ليست في السي بلس بلس  بقدر ما هي غباء من المبرمج  B)  ، هل يوجد مبرمج يضيع حجم مصفوفـة محجوزة على الـ heap ....
بالنسبة للمصفوفات العاديـة فهـناك تعبير يوجد حجمها إذا فقدتـه   ( size c /size *c ) حيث أن الـ c مصفوفة محجوزة على الـ stack ....
وبعـدين ما معـنى هذا الكلام
اقتباس
اللغات المحترمة (احم) فيها array محترم
يعـني أن السي بلس بلس غير محترمـة ؟؟؟
#16
اقتباس
الاخ / الاخت Asm4all

أخ / ولد / ذكر / أحمد / عاصم :P , ما في أحد غيرك قالي اخت, يا ريت ما تتكرر B)

#include <iostream> // نتضمن المكتبة iostream لاستخدام cin
using namespace std; // استعمال مساحة الاسماء القياسية
// أساسيات سي++
int main(int argc, char* argv[]) { // بداية الدالة الرئيسية في البرنامج
int n; // حجز متغير من نوع int
cin >> n; // قرائة قيمة من النوع int من المستخدم
int array1[n][n]; // حجز مصفوفة في وقت التنفيذ غير معلومة الحجم من قبل - أهم نقطة
return 0; // العودة من الدالة الرئيسية
}

اقتباس
فإذا أعادت القيمة صفر فإنك تخبر نظام التشغيل أنه لا يوجد أي خطأ في البرنامج .. وإذا أعاد البرنامج القيمة 1 فإنك بذلك تخبر النظام أنه يوجد خطأ في البرنامج
اقتباس
الاصح في هذه الحالات استخدام الكلمه bool

فانها احد التحسينات التي ادخلت من السي علي السي بلس بلس

لانها تقبل فقط القيم اما 0 او 1

هل يستفيد نظام التشغيل نفسه من تمرير أي قيمة من الدالة main ؟؟ لاء , لأنك لو مررت اي قيمة لن يتغير رد فعل نظام التشغيل

طيب من يستفيد من هذا التمرير إذاً ؟؟ الفكرة في استدعاء برنامج من داخل برنامج آخر , برنامج يؤدي وظيفة ويعطي الناتج لبرنامج آخر , الفكرة تستخدم بكثرة في اليونكس , فلا يقتصر تمرير قيمة 0 أو 1 فقط , يمكل مثلا أن تكون رقم يحدد نوع الخطأ بحيث يتعرف البرنامج المستدعي على نوع الخطأ لأنه يستدعي البرنامج كما يستدعي الدوال ومن حقه أن يعرف نتيجة الاستدعاء ونوع الخطأ ان وجد

طبعا ليس في كل الحالات تستخدم القيمة العائدة من البرنامج , أحياناً تختبر فقط إذا كانت صفر أو لا لتتأكد من نجاح الدالة أو البرنامج - نفس ما تفعله مع بعض الدوال في اللغة - ولهذا يفضل طبعاً ارجاع رقم لكل خطأ يمكن أن يحدث داخل البرنامج لكي يتعرف عليه من يستدعي البرنامج كدالة في برنامجه

أحمد

#17
Asm4all كتب:
أخ / ولد / ذكر / أحمد / عاصم :P , ما في أحد غيرك قالي اخت, يا ريت ما تتكرر  B)

عذرا يا اخ أحمد ... لاتواخذني :lol:

شكرا جزيلا على أهتمامك بموضوعي , وان شاء الله بموازين أعمالك....... يااااااارب ..

والشكر موصول أيضا لكل من ساهم بكلمه او توجيه او اعانه في هذا الموضوع ...

دمتم بحفظ الله ورعايته ســــــــــالمين ..

والى الامام

تم تعديل هذه المشاركة بواسطة k.f.u في 24 فبراير 2006 في 16:27

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

samp8a5b2fc47732a301.jpg

#18

المفروض يا أخ Asm4all تغير صورة البنت ...... عشان الناس ما تغلط عليك مرة ثانية :P

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

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

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

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

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

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