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

ارجو المساعدة حول ال copy constuctor

مغلق
بدأه big boss 1988 في 13 مايو 2007 · 3 رد · 728 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي مشكلة حول موضوع الـ copy constructor ارجو شرح الموضوع او امثلة على هذا الموضوع خصوصا كيف يتم عمل copy pointer array والف الف شكر.

:rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

#2

اخوي الـ Copy Constructor يعطي نسخة الكائن عنوانها الـخاص فيها ، عشان البرنامج لا ينتج dangling pointers اللي تفتك بالبرنامج Crash . و هذي قاعدة :

كلما ما كان عندك data members ديناميكين (Dynamically Allocated) لازم تكتب Copy Constructor ، عشان الـ data members اليديدين يكون عندهم عنوانهم الخاص على الذاكرة :)

و يكون تقريبا جذي للمصفوفات :

className::className(const className& rhs)
{
	m_pArray = new float[0];
		*this = rhs;
}

اخوي عشان لا اعقدك ، كلما تبي تكتب Copy Constructor ، اسأل نفسك هالسؤال :

"الكائن اللي انا سويته مع بيانات ديناميكية راح يكون له نسخة. اشلون اعطيه هويته الخاصة؟؟"

الجواب اهو بأن كل البيانات الديناميكية تسوي لها عملية "new" يديدة عشان كل data member يكون له عنوانه اليديد. و اخيرا نعين المؤشر this إلى الكائن ، حتى لا نكون في خطر أن يؤشر على النسخة الأصلية :)

تم تعديل هذه المشاركة بواسطة Ferrum في 13 مايو 2007 في 08:38

:::كوت بو 6:::

IDE : Microsoft Visual Studio 2005 Pro

#3

زيادة على كلام اخي العزيز Ferrum :

ال Copy Constructor يستخدم ل انشاء object جديد ( X ) بنفس مواصفات ال object القديم ( Y ) ، مثلاً لنفرض ان لديك class اسمها Student ويوجد فيها data members على النحو التالي : string name و int age

class Student
{
public:
	Student( const Student& right ) // copy constructor
		{
		age = right.age;
		name = right.name;
		}

	Student( int Age, string Name )
		{
		age = Age;
		name = Name;
		}

private:
	int age;
	string name;
};

نقوم بانشاء object باسم : Ali و عمر 21 :

Student student1( 21, "Ali" );

وبعد ذلك اردنا عمل object آخر بنفس الاسم والعمر ، الطريقة المعروفة اننا نقوم بالتالي :

Student student2( 21, "Ali" );

لكن مع استخدام ال Copy Constructor فقط نقوم بكتابة التالي :

Student student2( student1 );

ارجوا ان تكون الصورة واضحة :)

#4

الف الف الف شكر لكم على هذا الشرح

-waf

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

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

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

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

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

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