ืœื“ืœื’ ืœืชื•ื›ืŸ

Copy constructor

ืžืชื•ืš ื•ื™ืงื™ืคื“ื™ื”, ื”ืื ืฆื™ืงืœื•ืคื“ื™ื” ื”ื—ื•ืคืฉื™ืช

ื‘ื ืื™ ื”ืขืชืงื” (ื‘ืขื‘ืจื™ืช: ืžืฉื‘ื˜) - ืžืชื•ื“ื” ืฉืœ ืžื—ืœืงื” ื”ืžื•ืคืขืœืช ื‘ืขืช ื™ืฆื™ืจืช ืžื•ืคืข ืฉืœ ื”ืžื—ืœืงื” ื›ื”ืขืชืงื” (=ืฉื›ืคื•ืœ) ืฉืœ ื ืชื•ื ื™ ืžื•ืคืข ืงื™ื™ื. ื‘ืฉืคืช C++ (ื›ืžื• ื’ื ืฉืคื•ืช ืื—ืจื•ืช ื”ืžืืคืฉืจื•ืช ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื) ื‘ื ืื™ ื”ืขืชืงื” ื”ื•ื ืคื•ื ืงืฆื™ื” ื‘ืขืœืช ืฉื ื–ื”ื” ืœืฉื ื”ืžื—ืœืงื” ืฉื‘ื” ื”ื™ื ืžื•ื’ื“ืจืช.

ืžื‘ื—ื™ื ื™ื ื‘ื™ืŸ ืฉื ื™ ืกื•ื’ื™ ื”ืขืชืงื”:

  • "ื”ืขืชืงื” ืจื“ื•ื“ื”" (Shallow copy) - ืžื‘ื•ืฆืขืช ืขืœ ื™ื“ื™ ื‘ื ืื™ ื”ื”ืขืชืงื”, ื”-copy constructor, ื”ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืฉืคืช ื”ืชื›ื ื•ืช (ื›ืœื•ืžืจ ืฉืœืื—ืจ ืฉื”ืชื•ื›ื ื™ืช ืขื•ื‘ืจืช ืื™ื ืคืจื˜ืฆื™ื”, ื”ื”ื“ืจื”, ืฉืœื‘ื™ ื”ื”ืขืชืงื” ื ื”ืคื›ื™ื ืฉืงื•ืคื™ื ื•ืžื‘ื•ืฆืขื™ื ืœืคื™ ืฉื™ืงื•ืœื™ ื”ืžืขืจื›ืช ืžื‘ืœื™ ืฉืœืžืชื›ื ืช ื™ืฉ ืืคืฉืจื•ืช ืœืฉืœื•ื˜ ื•ืœื‘ืงืจ ืื•ืชื”)
  • "ื”ืขืชืงื” ืขืžื•ืงื”" (Deep copy), - ื›ื“ื™ ืœื—ื•ืœืœ ืื•ืชื” ื ื“ืจืฉ ื”ืžืชื›ื ืช ืœื™ืฆื•ืจ ืืช ื‘ื ืื™ ื”ื”ืขืชืงื” ื‘ืขืฆืžื•, ื‘ืขื™ืงืจ ื‘ืžืงืจื” ืฉืœ ืžืฆื‘ื™ืขื™ื.

ื”ืขืชืงื” ืขืžื•ืงื” ืžื˜ืคืœืช ื‘ื ืชื•ื ื™ื ืฉืื™ื ื ืืžื•ืจื™ื ืœืขื‘ื•ืจ ืžืขืฆื ืœืขืฆื ื›ืคื™ ืฉื”ื. ื”ื“ื•ื’ืžื” ื”ื‘ื•ืœื˜ืช ืœื›ืš ื”ื™ื ืžืฆื‘ื™ืขื™ื. ืื ื ืกืชืคืง ื‘ื”ืขืชืงื” ืจื“ื•ื“ื” ื•ื ืขืชื™ืง ืžืฆื‘ื™ืข ืื—ื“ ืžืขืฆื ืœืขืฆื, ื™ืขืฉื• ืฉื ื™ ืขืฆืžื™ื ืฉื™ืžื•ืฉ ื‘ืื•ืชื• ืžืฆื‘ื™ืข. ื›ืœ ืฉื™ื ื•ื™ ื‘ืขืฆื ืื—ื“ ืฉื‘ื• ื™ืฉืชื ื” ืชื•ื›ืŸ ื›ืชื•ื‘ืช ื”ื–ื™ื›ืจื•ืŸ ื”ืžื•ืฆื‘ืขืช (ืืš ืœื ืชืฉืชื ื” ื›ืชื•ื‘ืช ื”ื–ื™ื›ืจื•ืŸ ืขืฆืžื”) ื™ื’ืจื•ืจ ืฉื™ื ื•ื™ื™ื ื’ื ื‘ืขืฆื ื”ืื—ืจ. ืžืฆื‘ ื›ื–ื” ืœืจื•ื‘ ืื™ื ื• ืจืฆื•ื™.

ื‘ืฉืคืช C++, ืœื ื ื™ืชืŸ ืœื”ืฆื”ื™ืจ ืขืœ ื‘ื ืื™ ื”ืขืชืงื”, ืžื‘ืœื™ ืœื”ืฆื”ื™ืจ ืขืœ ื‘ื ืื™ ื‘ืจื™ืจืช- ืžื—ื“ืœ (Default Constructor), ืืฃ ืขืœ ืคื™ ืฉื”ืžื”ื“ืจ ืœืจื•ื‘ ื™ื™ืฆื•ืจ ืื•ืชื• ืขืœ ืคื™ ืจืฆื•ืŸ ื”ืžืชื›ื ืช.

ื‘ื‘ื ืื™ ื”ื”ืขืชืงื” ื”ืงืจื™ืื” ื”ื™ื ื›ืš ืฉื”ื”ืชื™ื™ื—ืกื•ืช ื”ื™ื ืœืงื‘ื•ืข (const) ื•ืœื ืœืžืฉืชื ื” (ื›ืœื•ืžืจ: const value&) ื”ืžื‘ื˜ื™ื—, ืฉืœื ื™ืฉื•ื ื” ื”ืžืฉืชื ื” ืฉืœ ื”ืขืฆื ื”ืžื•ืขืชืง.

ื‘ึพ.NET ื•ื‘ึพJava ืงื™ื™ืžืช ืคื•ื ืงืฆื™ื™ืช Clone ื”ืžื•ื’ื“ืจืช ืขืœ ืžื—ืœืงืช ื”ืฉื•ืจืฉ (Object) ื”ืžื‘ืฆืขืช ื‘ืชื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืขืชืงื” ืจื“ื•ื“ื” ื•ื ื™ืชืŸ ืœื“ืจื•ืก ืื•ืชื” ื›ืš ืฉืชื‘ืฆืข ื”ืขืชืงื” ืขืžื•ืงื” (ื‘ืฉืชื™ ื”ืกื‘ื™ื‘ื•ืช ืื™ืŸ Copy constructor).

ื“ื•ื’ืžื” ืœืžื™ืžื•ืฉ ื‘ืชื›ื ื•ืช (C++)

[ืขืจื™ื›ืช ืงื•ื“ ืžืงื•ืจ | ืขืจื™ื›ื”]
class CPerson {
  int m_iAge;
  string m_szName;
  Person* m_pMother;
 
  public: CPerson(const CPerson& p) {
   m_iAge=p.m_iAge;
   m_szName=p.m_szName;

   //This check would make sense for an assignment operator, but not for a copy constructor,
   //since the object should always be a new one.
   //if (NULL != m_pMother) {
   //  delete(m_pMother);
   //  m_pMother = NULL;
   //}

   if (NULL != p.m_pMother) {
     m_pMother=new Person(p.m_pMother);
   }
  }
};
ืื•ื—ื–ืจ ืžืชื•ืš "https://he.wikipedia.org/w/index.php?title=Copy_constructor&oldid=38515115"