السلام عليكم ...
اخواني اريد ان أسالكم عن شيئ تعقد علي بعض الشيء ... :angry: :angry:
أولا اليكم الكود :
#include<iostream>
#include<cstdlib>
using namespace std ;
/* ..................................... */
class Rectangle
{
double* largeur ;
double* hauteur ;
public :
Rectangle(double l ,double h )
:
largeur( new double (l) )
,
hauteur( new double (h) )
{}
~Rectangle();
double get_l(){ return *largeur ;}
double get_h(){ return *hauteur ;}
};
/* ............................................*/
Rectangle :: ~Rectangle()
{
delete hauteur;
delete largeur;
}
/* ....................... */
void affiche( Rectangle tmp )
{
cout<<" hauteur : "
<< tmp.get_h()
<<"\n largeur : "
<< tmp.get_l()
<<endl;
}
/* .....................*/
int main(){
Rectangle r(3.0,4.0);
affiche(r);
cout<<"\n\n";
cout<<" hauteur : "<<r.get_h();
cout<<" largeur : "<<r.get_l();
return 0;
}. خلال الكود لم أدرج le constructeur de copie ...
بل سيكون الدور Le constructeur de copie par défaut .
المشكل هو .. بما انني لم اعرف constructeur de copie فسيحدث مشكل عند تطبيق هذا الكود ..
cout<<" hauteur : "<<r.get_h(); cout<<" largeur : "<<r.get_l();
لأن المتغير tmp والذي هو وسيط ..للدالة الطباعة .. سيحمل نفس addrasee الذي يحملها الكائن r ...
اليكم الصورة . فأنا لا احسن التعبير ..

من خلال الصوة .. نرى عند انتعاء البرنامج من تنفيذ دالة الطباعة فانه يقوم بعملية delete ... للمتغير tmp ...
اليكم صورة أخرى لتقريب أكثر ... ;)

اذا بهذا فان الكائن r سيفقد كل من قيمة ..الخصائص ..وهما (hauteur / largeur ..) ..
لكن لم افهم لماذا عند تنفيذ البرنامج ... تكون النتيجة :D :D ...

..... أما انا مخطئ في تفسير ما يحدث خلال تنفيذ البرنامج .. :blush: :blush: ..
أرجوا ان لا تبخلوا علينا بردودكم ...
وبارك الله فيكم ... :)

