PDA

View Full Version : شي گرايي



hobab1987
یک شنبه 13 اردیبهشت 1388, 00:07 صبح
سلام
اشكال سازنده هاي اين برنامه نمي دونم چيه!!!

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!";
}
}

panni-qalbeyakhi
دوشنبه 14 اردیبهشت 1388, 02:13 صبح
سازنده شما این اشکال را دارد که شما باید مقداری که ارسال می شود به تابع را برابر فیلد کلاس قرار بدهید به این صورت
firstname=f
شما در همه جا این جابجایی را باید در سازنده انجام دهید
و نکته دیگر این که بنویسید
int main نه void main

panni-qalbeyakhi
دوشنبه 14 اردیبهشت 1388, 02:20 صبح
میشه بدونم سوال این برنامه چیه؟

hobab1987
دوشنبه 14 اردیبهشت 1388, 23:36 عصر
میشه بدونم سوال این برنامه چیه؟
البته ، برنامه اي كه اطلاعات 10 كارمند را بخواند و نمايش دهد
1-اطلاعات كارمند : نام ، نام خانوادگي ، شماره كارمندي ،
2-تاريخ تولد : yy/mm/dd
3-آدرس: استان، شهر، خيابان، كوچه، پلاك
براي اين سه مورد بايد كلاس بسازم سازنده مخرب هم الزاميه!
خوب؟

_____________________________________
اشكالم سر اين سازنده هاس چون مقدار اوليه براي سازنده ندارم و بايد از كاربر بگيرم
براي همين يه تابع ورودي تعريف كردم تا مقادير را به پارامتر هاي سازنده بفرسته
الان كد پاييني كه شما فرموديد رو متوجه نشدم آخه در f چيزي نيس و firstname هم از كاربر اسم رو گرفته با اين كار firstname ام 0 ميشه!!!!!

firstname=f

panni-qalbeyakhi
چهارشنبه 16 اردیبهشت 1388, 03:23 صبح
برنامه چند تا اشکال داره
1- چرا مخرب را از نوع void تعریف کردین
2- من کاملا متوجه نشدم شما کجا ورودی را می دین در پنجره اجرا باید وارد شود یا در main
3- اگر در باید توابعی مانند set داشته باشیم یا در سازنده مقدار را وارد کنیم یعنی

employee("mahdi","lotfi" ,"12")

mortezamsp
چهارشنبه 16 اردیبهشت 1388, 11:17 صبح
سلام آقاي برنامه نويس خوب!

اولا اينكه لطفا مردم رو سركار نذاريد.كسي حوصله نداره يه عالمه كد بخونه و اصلاح كنه.همه عجله دارن تا يادبگيرن.اينجا فقط سوال بپرس.مثلا بگو چجوري توابع رو تودرتو بسازم.من كه كد شما رو اصلاح كردم ولي فكركنم بقيه حوصله اين كار رو نداشته باشن.من كه خودم از ملت ميخواستم اصلاح كنن كسي جواب نميداد.

دوما اينكه اگر ميخواستيد برنامه كارمندان رو بسازيد بهتربود از ليست پيوندي استفاده ميكرديد.اينطوري خيلي بهتر بود.

سوما برنامه شما چون در اون كلاس ها رو توي هم تعريف كرده بوديد يك نكته مهم داره:
اينكه وقتي شما كلاس الف رو در كلاس ب تعريف ميكنيد ديگه نميتونيد در main شئي از ب تعريف كنيد! بلكه بايد اون در يكي از توابع الف بسازيد.چون شئ ب در الف محصور شده و نميتونه خارج از اون تعريف بشه.واسه همين من برنامتونو تغيير دادم و در اون آرايه هاي از جنس date رو در employee و آرايه از جنس adress رو در date تعريف كردم.ژس يادت باشه وقتي كلاس ها رو تودرتو تعريف ميكني براي دسترسي به كلاس داخلي بايد اول وارد كلاس خارجي بشي.
اشكال بعدي برنامت اين بود كه براي توابع سازنده و مخرب نوع void تعريف كردي.اين كار اشتباهه اين توابع نبايد نوع داشته باشن.
اشكال بعديتون آرگومان فرستادن براي تابع سازنده بود.با اين كار شما بايد عملگر [] رو قبلا گرانبار ميكرديد كه نكرديد.اگر منظورتان از تابع سازنده مقداردهي اوليه بود لازم به فرستادن آرگومان نبود.من آرگومان ها رو حذفشون كردم.
بدشم مقداردهي اوليتون هم خيلي عجيب بود.f=firstname يعني چي؟firstname كه هنوز مقدار نگرفته!من يه مقدار پيش فرض ديگه گذاشتم.
بعدشم مقدار n زياد بود.برنامه خطا داد.مقدارشو كم كردم.
و اشكالات تايپي هم داشتيد.زياد.


اين كد اصلاح شده ي برنامه شماست:


#include <iostream.h>
#include <conio.h>
#include <process.h>
#define n 5
#define col 30
class employee
{
public:
void get();
void show();
employee();
~employee();
private:
char firstname[20];
char lastname[20];
int id;
class date
{
public:
void get();
void show();
date();
~date();
private:
int year;
int month;
int day;
class address
{
public:
void get();
void show();
address();
~address();
private:
char town[20];
char state[20];
char street[20];
char alley[20];
int plaque;
};
};
};
employee em[n];
//*************************************
void main()
{
int i;
for(i=0;i<n;i++)
{
em[i].get();
em[i].show();
}
}
//*************************************
employee::employee()
{
firstname[20]='n','o','t','s','e','t';
lastname[20]='n','o','t','s','e','t';
id=0;
}
void employee::get()
{
clrscr();
gotoxy(25,12);
cout<<"________Get Personal Identity________"<<endl;
gotoxy(col,15);
cout<<"First name:";
cin>>firstname;
gotoxy(col,17);
cout<<"Last name:";
cin>>lastname;
gotoxy(col,19);
cout<<"ID:";
cin>>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 dte;
dte.get();
dte.show();
}
//***********************************************
employee::date::date()
{
day=0;
month=0;
year=0;

}
void employee::date::get()
{
clrscr();
gotoxy(25,12);
cout<<"Enter date of born please:(DD/MM/YY)";
cin>>day>>month>>year;
}
void employee::date::show()
{
clrscr();
gotoxy(25,12);
cout<<"________Date of born________";
gotoxy(col,15);
cout<<day<<"/"<<month<<"/"<<year;
getch();

address adrs;
adrs.get();
adrs.show();
}
//********************************************
employee::date::address::address()
{
town[20]='n','o','t','s','e','t';
state[20]='n','o','t','s','e','t';
street[20]='n','o','t','s','e','t';
alley[20]='n','o','t','s','e','t';
plaque=0;
}
void employee::date::address::get()
{
clrscr();
cout<<"________Get Address_________"<<endl;
cout<<"Town:";
cin>>town;
cout<<"State:";
cin>>state;
cout<<"Street:";
cin>>street;
cout<<"Alley";
cin>>alley;
cout<<"Plaque-num";
cin>>plaque;
}
void employee::date::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:"<<street;
gotoxy(col,15);
cout<<"Alley"<<alley;
gotoxy(col,15);
cout<<"Plaque-num"<<plaque;
getch();
}
employee::~employee()
{
{
cout<<"Finished!";
}
}
employee::date::~date()
{
{
cout<<"Finished!";
}
}

employee::date::address::~address()
{
{
cout<<"Finished!";
}
}

hobab1987
چهارشنبه 16 اردیبهشت 1388, 22:11 عصر
يه دنيا ممنون از راهنمايي دوستان
من كه هنوز برنامه نويس نشدم !!! ليست پيوندي رو تازه درس دادن اتفاقا بايد همين تمرين رو با ارث بري بنويسيم!!
راستي اين برنامه رو با كلاسهاي جدا هم نوشتم كدوم رو تحويل بدم ؟ استادمون چيزي از كلاسهاي تودرتو يادنداده و نميدونه! اما خوب فهميدم مرسي !
در مورد سازنده ها استادمون گفته بود گاهي ميتونيد void كنيد اگر مقدار اوليه نداشته باشيد!! اما همه ميگن نميتوني void كني!:متفکر: