آقا سلام . شرمنده من این کد ها رو تند تند نوشته بودم برای همین اون مشکلات تایپی توش پیش اومد !
تابع Sleep حرف S اولش بزرگه ( Caps ) . اون sleep رو به Sleep تغییر بدی حله !
توی یکی از خط های برنامه دوم هم من نوشته بودم (if (!out که باید نوشته میشد (if (!outf تا برنامه دوم هم کامپایل بشه !
همون بالا هر دو رو تصحیح کردم !
درباره operator overloading :
یکی از رکنهای اساسیه زبان ++C همون شی و کلاس هستند . در واقع شما یک کلاس رو تعریف می کنی تا بتونی تعدادی شی رو از جنس همون کلاس بسازی .
همینطور می دونیم عملگر های زبان ++C مثل + یا - یا * یا ..... روی عملوند هایی از نوع
متغیر بخوبی کار می کنند . می تونیم دوتا متغیر مثلا از نوع int رو با هم جمع کنیم یا از هم کم کنیم . مثال
کد:
[align=left]
int x,y,z
x = y + z - x[/align]
در اینحا هر سه متغیرهایی از نوع int هستند و برای کامپایلر کاملا شناخته شده !
ولی اگر عملوند ما
شیی از یک کلاس بود چطور ؟؟ در این حالت مثلا عملگر + برای شی ما (یا به عبارتی همون کامپایلر ++C ) ناشناخته و تعریف نشده است ! زبان ++C به ما این امکان رو میده که نحوه برخورد کامپایلر هنگامی که یک عملوند به شکل یک شی ظاهر میشه رو مشخص کنیم . مثال :
کد:
[align=left]class num
{
public : int digit ;
};
num x,y,z;[/align]
در کد بالا x , y و z شی هایی از کلاس num هستند و متغیر نیستند ! پس نوشتن عبارت x = y + z - x توسط کامپایلر خطا محسوب خواهد شد چرا که شما هیچ کدوم از عملگرهای + و - رو برای کلاس خودتون تعریف نکردید و کامپایلر نمی تونه بفهمه باید با شی شما چطور برخورد بکنه !
کد زیر برنامه ای هست که دوتا string رو با عملگر + بهم می چسبونه با کمک بازنویسی عملگر ها :
کد:
[align=left]#include <iostream.h>
#include <string.h>
class String
{
public :
char str[20];
String operator+(String ss)
{
String temp;
strcpy(temp.str, str);
strcat(temp.str, ss.str);
return temp;
}
String(char* s="\0")
{
strcpy(str,s);
}
};
void main()
{
String s1 = "Mamad";
String s2 = "2003 ";
String s3;
s3 = s1 + s2;
cout << s3.str ;
}[/align]