• 0

التحميل الزائد للمعاملات في ++c

هذا برنامج استخدمت فيه التحميل الزائد للمعاملات لكن واجهتني مشكلة ألا وهي أني عندما أجعل نوع القيمة المعادة Counter يظهر خطأ 

  class "Counter" has no suitable copy constructor      
رغم أنه يفترض -في هذه الحالة-أن تستدعى دالة البناء العادية لا الناسخة فلماذا تستدعى الناسخة ويخبرك أنها غير ملائمة؟

بالإمكان حل المشكلة بحذف الدالة البانية الناسخة the copy constructor التي أنشأتها وترك مهمة النسخ لو احتجتها للدالة التي تنشئها البيئة default copy constructor أو أني نغير القيمة المعادة لـint وأجعلها تعيد الcount مباشرة لكنه ليس الحل المثالي للمشكلة

#include <iostream>
using namespace std;
class Counter
{
private:
	int count; //count
public:
	Counter() : count(0) { } //constructor
	Counter(int a) : count(a) {  } //constructor
	Counter(Counter& c ) {
		this->count = c.count;
		cout << endl<<"Copy constructor has been invoked"<<endl;
	} //constructor*/

	int get_count() //return count
	{
		return count;
	}
	Counter operator ++ () //increment (prefix)
	{

		return Counter(++count);
	}
	int operator ! () //increment (prefix)
	{
		if (count == 0)
			return(1);
		else
			return(0);
	}
	Counter operator -- () //increment (prefix)
	{

		return Counter(--count);
	}
	Counter operator ++ (int) //increment (prefix)
	{

		return Counter(count++);
	}
	Counter operator -- (int) //increment (prefix)
	{

		return(count--);
	}
	Counter operator + (Counter x) {
		int c;
		c = count + x.count;
		return  Counter(c);
	}
};

int main()
{
	Counter i;
	Counter c1, c2, c3; //define and initialize
	cout << "\nc1=" << c1.get_count(); //display
	cout << "\nc2=" << c2.get_count();
	++c1; //increment c1
	++c2; //increment c2
	++c2; //increment c2
	cout << "\nc1=" << c1.get_count(); //display again
	cout << "\nc2=" << c2.get_count();
	i = ++c2; // error
	cout << "\ni= " << i.get_count();
	--c1;
	Counter c4 = c2;
	cout << "\nc4=" << c4.get_count() << endl; //display again
	cout << "\nc2=" << c2.get_count() << endl;
	i = c2++;
	c2++;
	cout << "i= " << i.get_count();
	cout << "\nc2=" << c2.get_count() << endl;
	//c4 = !c2;
	cout << "\nc4=" << c4.get_count() << endl;
	c3 = c1 + c2;
	cout << "\nc1=" << c1.get_count();
	cout << "\nc2=" << c2.get_count();
	cout << "\nc3=" << c3.get_count();
	return 0;
}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

لا توجد أي إجابات على هذا السؤال بعد


يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن