كتبت كود في الفيجول سي ++ 2010 يحتوى على كلاس
واريد توضيح داله البناء والهدم بطباعه عباره داخل الدالتين توضح متى تنفذ داله البناء والهدم
لماذا في داله destructor لا تظهر عباره الطباعه الموجوده داخلها في التنفيذ ؟؟
كتبت كود في الفيجول سي ++ 2010 يحتوى على كلاس
واريد توضيح داله البناء والهدم بطباعه عباره داخل الدالتين توضح متى تنفذ داله البناء والهدم
لماذا في داله destructor لا تظهر عباره الطباعه الموجوده داخلها في التنفيذ ؟؟
كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!
هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب
شكرا استاذ محمد على الرد
لكن عندما اكتب نفس الكود في برنامجcode blocks يتنفذ الكود وتظهر الرسالتين في الدالتين
وهذا هو الكود هو كود بسيط جدا :
#include<iostream>
using namespace std;
class test{
public:
test(){
cout<<"constructor (t)"<<endl;
}
~test(){
cout<<"destructor (t)";
}
};
int main(){
test t;
return 0;
}تم تعديل هذه المشاركة بواسطة محمد عودة في 23 فبراير 2013 في 21:38
كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!
هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب
الهدام ينفذ فعلياً لكن لأنك أنشأتي الكائن في الدالة الرئيسة تُطبع الجملة وتظهر جملة Press any key to continue . . . عند ضغطتها يستدعى الهدام ويخرج البرنامج بسرعة (إذا كنت سريعة الملاحظة سترين الجملة).
أنشيئ الكائن في دالة غير الدالة الرئيسية كي يُستدعى الهدام عند الخروج منها مثل:
#include<iostream>
using namespace std;
class test{
public:
test(){
cout << "constructor (t)" << endl;
}
~test(){
cout << "destructor (t)" << endl;
}
};
void foo(void) {
test t;
}
int main(){
foo();
return 0;
}الكود يعمل بشكل ممتاز على VC++ 2010... لا يظهر الـdestructor بوضوح على كل حال لذلك أضف endl بعده
هذه الجملة خاطئة :wacko:
او انشئه داخل الدالة الرئيسية لكن داخل scope منفصل:
int main(){ { test t; } return 0;}تم تعديل هذه المشاركة بواسطة C++er في 22 فبراير 2013 في 02:04
مدونتي: C++ Tips and Tricks
ماذا لو استخدم pause
او cin.get();
#include <iostream>
#include <cstdlib>
using namespace std;
class Test{
public:
Test(){
cout << "constructor (t)" << endl;
}
~Test(){
cout << "destructor (t)" << endl;
}
};
int main(){
Test t;
system("pause");
return 0;
}تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 22 فبراير 2013 في 22:04
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
شكرا لكم
نفذت الداله بنجاح وظهرت الرساله في الطريقتين
عند الاعلان عن object داخل داله خارجmain
او عند الاعلان لل object داخل scope منفصل
ام عند استخدام pause لا تظهر رساله destructor فقط تظهر press any key to continue ....
تسلموا اخواني على الردود وجزيتم الف خير
كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!
هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب
تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 22 فبراير 2013 في 23:16
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
يبدو انى أخطأت باضافة pause or get
ففى كل الحالات لن يتم الهدم الا بعد جملة ال return
لكن ما حدث معك ليس قياسى فى اللغة وانما فى VStudio لانى جربت نفس الكود على Code::Blocks وطبع الجملتين
كذلك لو شغلت البرنامج الناتج من command line مباشرة
C:>dest.exe
حيث dest.exe هو البرنامج الناتج من ترجمة الكود
تحياتى
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.
Khaled.Alshaya كتب:CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.
شكرا لك استاذ خالد :)
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…