سؤال

أعلم أنه يمكنك جعل شيئين متساويين عند الإعلان عن أحدهما.لقد اختبرت هذا في برنامجي.ولكن عندما ذهبت لاستخدام بيان المهمة شعرت بالخوف.هل يمكنك جعل كائنين متساويين مع بعضهما البعض باستخدام بيان الإسناد أم يمكنك القيام بذلك فقط عند الإعلان عن كائن واحد؟

هل كانت مفيدة؟

المحلول

لديك توفير المشغل = إلى فئة بحيث نسخ محتويات كائن آخر. على سبيل المثال:

class A
{
  public:

   //Default constructor
   A();

   //Copy constructor
   A(const A&);

   //Assignment operator
    A& operator=(const A& a);
};

int main()
{
  A a; //Invokes default constructor
  A b(a); //Invokes copy constructor;
  A c;
  c = a; //Invokes assignment operator
}

نصائح أخرى

والحمولة الزائدة عامل التعيين لذلك الكائن يمكن أن تساعدك. (أرجو أن نتحدث عن الأشياء من نفس الفئة:))

لعامل التعيين فقط الزائد عامل التعيين وفقا لتنفيذ صفك.

وربما تكون هناك حاجة الكائن تهيئة أو إنشاء أو تتساوى مع كائن آخر عند الكائن يعتمد على أشياء أخرى.

في هذه الحالة، منشئ يعطي أفضل solution..because فإنه لا ينسخ الكائن إلى كائن آخر فشيئا فشيئا نسخ. أحادي المعامل نسخة يخلق المشكلة إذا تم تخصيص الذاكرة بشكل حيوي الكائن. مع ذلك، فإن الحلول هي تحديد copy_constructor في constuctor نسخة class.The يأخذ إشارة إلى كائن موجود من نفس النوع كما حجتها، ويستخدم لإنشاء كائن جديد من قائمة واحدة. هنا هو examplet لمساواة الكائنات مع الكائنات الأخرى باستخدام نسخة منشئ ..

#include "stdafx.h"
#include "iostream"
using namespace std;
class array
{
int *ptr;
int size;
public:
array (int sz) {
ptr = new int [sz];
size =sz;
for(int index=0;index<size;index++)
ptr[index]=size;
}
~array(){
delete[] ptr;
}
array(array &a) {
int index;
ptr=new int[a.size];
for(index=0;index<a.size;index++)
ptr[index]=a.ptr[index];
cout<<"copy_constructor invoked"<<endl;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
array num(10);
array x(num); //invokes copy_constructor
array y=num; //invokes copy consturctor

return 0;
}

تنطبق هذه الإجابة على C#.

بالإضافة إلى عامل التحميل الزائد = يجب عليك أيضًا تجاوزه يساوي طريقة.يجب عليك أيضا التحقق القواعد الارشادية للتحميل الزائد يساوي () والمشغل ==

public struct Complex 
{
   double re, im;
   public override bool Equals(Object obj) 
   {
      return obj is Complex && this == (Complex)obj;
   }
   public override int GetHashCode() 
   {
      return re.GetHashCode() ^ im.GetHashCode();
   }
   public static bool operator ==(Complex x, Complex y) 
   {
      return x.re == y.re && x.im == y.im;
   }
   public static bool operator !=(Complex x, Complex y) 
   {
      return !(x == y);
   }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top