• 0
طموحة بلا حدود

[ تمت الإجابة ]داله الهدم (destructor) لا تنفذ في visual c++ 2010 ما الحل؟

سؤال

كتبت كود في الفيجول سي ++ 2010  يحتوى على كلاس

واريد توضيح داله البناء والهدم  بطباعه عباره داخل الدالتين توضح متى تنفذ داله البناء والهدم

 

لماذا في داله destructor لا تظهر عباره الطباعه الموجوده داخلها في التنفيذ ؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

11 إجابة على هذا السؤال .

  • 0

أين الكود؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا استاذ محمد على الرد

 

لكن عندما اكتب نفس الكود في برنامج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;}
تم تعديل بواسطه محمد عودة
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الهدام ينفذ فعلياً لكن لأنك أنشأتي الكائن في الدالة الرئيسة تُطبع الجملة وتظهر جملة 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;}
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الكود يعمل بشكل ممتاز على VC++ 2010... لا يظهر الـdestructor بوضوح على كل حال لذلك أضف endl بعده

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

او انشئه داخل الدالة الرئيسية لكن داخل scope منفصل:

int main(){    {      test t;    }	  return 0;}
تم تعديل بواسطه C++er
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ماذا لو استخدم 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
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لكم

نفذت الداله بنجاح  وظهرت الرساله في الطريقتين

عند الاعلان عن object داخل داله خارجmain

او عند الاعلان لل object داخل scope منفصل

 

ام عند استخدام pause لا تظهر رساله destructor فقط تظهر press any key to continue ....

 

تسلموا اخواني على الردود   وجزيتم الف خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

استخدمت Online compiler واعطانى النتيجة

 

http://ideone.com/C7tfvX

تم تعديل بواسطه MOHAMED FATHEI
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يبدو انى أخطأت باضافة pause or get

 

ففى كل الحالات لن يتم الهدم الا بعد جملة ال return

 

لكن ما حدث معك ليس قياسى فى اللغة وانما فى VStudio لانى جربت نفس الكود على Code::Blocks وطبع الجملتين

 

كذلك لو شغلت البرنامج الناتج من command line مباشرة

 

C:>dest.exe

 

حيث dest.exe هو البرنامج الناتج من ترجمة الكود

 

تحياتى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.

 

شكرا لك استاذ خالد :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .