-
برنامه شي گرايي
سلام سلام:11:
بچه ها من تازه شي گرايي (سازنده ها و مخرب هاش) رو ياد گرفتم ...
و اين برنامه ي با كلاس رو نوشتم:5:
امـــــــــــــــــــــــ ـــــــا...
Error ميده!!!:13:
Error هاش سر اين سازنده مخرب هاشه!!!
plz help
کد:
#include <iostream.h>
#include <conio.h>
#include <process.h>
#define n 10
#define col 30
class employee
{
public:
void get();
void show();
void employee(char *f,char *l,int d);
void ~employee();
private:
char firstname[20];
char lastname[20];
int id;
class date
{
public:
void get();
void show();
void date(int y,int m,int da);
void ~date();
private:
int year;
int month;
int day;
class address
{
public:
void get();
void show();
void address(char *t,char *s1,char *s2,char *a,int p);
void ~address();
private:
char town[20];
char state[20];
char street[20];
char alley[20];
int plaque;
};
address adrs[n];
};
date dte[n];
};
employee em[n];
//*************************************
void main()
{
int i;
for(i=0;i<n;i++)
{
em[i].get();
em[i].show();
dte[i].get();
dte[i].show();
adrs[i].get();
adrs[i].show();
}
}
//*************************************
employee::employee(char *f,char *l,int d)
{
f=firstname;
l=lastname;
d=id;
}
void employee::get()
{
clrscr();
gotoxy(25,12);
cout<<"________Get Personal Identity________"<<endl;
gotoxy(col,15);
cout<<"First name:";
cin>>firstname;
f=firstname;
gotoxy(col,17);
cout<<"Last name:";
cin>>lastname;
l=lastname;
gotoxy(col,19);
cout<<"ID:";
cin>>id;
d=id;
}
void employee::show()
{
clrscr();
gotoxy(25,12);
cout<<"________View Personal Identity________"<<endl;
gotoxy(col,15);
cout<<"First name:"<<firstname;
gotoxy(col,17);
cout<<"Last name:"<<lastname;
gotoxy(col,19);
cout<<"ID:"<<id;
getch();
}
//***********************************************
date::date(int y,int m,int da)
{
y=day;
m=month;
da=year;
}
void date::get()
{
clrscr();
gotoxy(25,12);
cout<<"Enter date of born please:(DD/MM/YY)";
cin>>day>>month>>year;
}
void date::show()
{
clrscr();
gotoxy(25,12);
cout<<"________Date of born________";
gotoxy(col,15);
cout<<day<<"/"<<month<<"/"<<year;
getch();
}
//********************************************
address::address(char *t,char *s1,char *s2,char *a,int p)
{
t=town;
s1=state;
s2=streat;
a=alley;
p=plaque;
}
void address::get()
{
clrscr();
cout<<"________Get Address_________"<<endl;
cout<<"Town:";
cin>>town;
cout<<"State:";
cin>>state;
cout<<"Street:";
cin>>streat;
cout<<"Alley";
cin>>alley;
cout<<"Plaque-num";
cin>>plaque;
}
void address::show()
{
clrscr();
gotoxy(25,12);
cout<<"________Show Address_________"<<endl;
gotoxy(col,15);
cout<<"Town:"<<town;
gotoxy(col,15);
cout<<"State:"<<state;
gotoxy(col,15);
cout<<"Street:"<<streat;
gotoxy(col,15);
cout<<"Alley"<<alley;
gotoxy(col,15);
cout<<"Plaque-num"<<plaque;
getch();
}
employee::~employee()
{
{
cout<<"Finished!";
}
}
date::~date()
{
{
cout<<"Finished!";
}
}
address::~address()
{
{
cout<<"Finished!";
}
}
-
همين جوري که نگاه کردم يه ايرادتون اينه که براي مخرب ها نمي تونين از void استفاده کنين . يعني درسته که نوع برگشتي نداره ولي void هم نبايد براي مخرب ها گذاشته باشه . ببينين اگه باز هم ارور داد بگين در خدمت هستين .
-
به سه تا سازنده ها ، متغيرf و l و d در تابع employee , به متغير i در تابع اصلي در كل بيشتر به متغير ها گير ميده!!
شي هايي كه بعد كلاس تعريف شده لازم در تابع اصلي هم تعريف كنم؟
راستي ممنون void رو پاك كردم!
-
من زدم 104 تا ارور داد . اولا ببخشيد که يادم رفت ، بايد براي سازنده ها هم void ها رو حذف کنين .
حالا همه سازنده هاتون پارمتر دارند . ولي موقع ايجاد يک شي از کلاس هاتون شما هيچ آرگوماني رو بهش ارسال نمي کنين . مثلا براي سازنده date که نوشتين :
[html]
date(int y,int m,int da);
[/html]
بايد موقع تعريف شي مثلا به اين صورت عمل کنين :
[html]
date dte(2008, 5, 6);
[/html]
به جاي اون شما اين کارو کرده بودين :
[html]
date dte[n]
[/html]
براي ديگر سازنده ها هم همين طور .
شي ها رو تو تابع main تعريف کنين .
-
دوست گرامي من اين شي رو به اين خاطر از نوع آرايه انتخاب كردم كه اطلاعات 10 نفر رو بگيره اگه اين كاري كه شما گفتيد انجام بدم آرايه ام از بين ميره بعد من چطوري كلاسم رو آرايه اي كنم؟؟!!!:23:
بعد اين مقاديري كه تو شي گذاشتيد من ميخوام كاربر خودش تعيين كنه مقدار رو ، مجبورم مقادير رو به اين متغيير ها بفرستم و مقادير اوليه رو صفر كنم!!!
-
آخه نميشه که سازنده سه تا پارامتر داشته باشه ولي موقع تعريف شيء هيچ آرگوماني بهش ارسال نشه . حالا يا کاربر وارد کنه يا خود شما تعيينش کنين . ولي مي تونين حالا که اصرار دارين آرگوماني به سازنده ارسال نکنين يه سازنده هم تعريف کنين به شکل زير :
[html]
employee();
[/html]
در حالي که سازنده قبليتونو هم دارين :
[html]
employee(char *f,char *l,int d);
[/html]
-
-
نه شما دقيقا روش خودتونو برين . يعني تو تابع main که مثلا نوشتين em[i].get ، همون جوري برين فقط دو تا کار بکنين :
1- اشياتون رو تو تابع main تعريف کنين . يعني تابع main تون به اين شکل باشه که در اين صورت اصلا اروري نداره . پس ديگه عوضش نکنين و اگه باز هم ارور ديدين سراغ تابع main نرين :
[html]
void main()
{
address adrs[n];
date dte[n];
employee em[n];
int i;
for(i=0;i<n;i++)
{
em[i].get();
em[i].show();
dte[i].get();
dte[i].show();
adrs[i].get();
adrs[i].show();
}
}
[/html]
2- يه سازنده بدون پارامتر هم بغل سازنده قبليتون بذارين . همون طوري که تو پست 6 عرض کردم . مثلا تو پياده سازيش هم به داده هاي عضوتون مقدار صفر انتساب بدين .
موفق باشين ...
-
okey
منم همين كارو كردم و به جواب رسيدم
براي حل اين تمرين از كلاس تودرتو استفاده كنم بهره يا كلاسهاي جدا؟ به هر دو صورت نوشتم!
-
جدا جدا بنويسين بهتره . خوندن برنامه راحت تر ميشه .