PDA

View Full Version : مبتدی: خروجی یک کلاس ساده



smemamian
یک شنبه 26 آذر 1391, 17:07 عصر
سلام

در کلاس ساده زیر خروجی یک عدد 4469696 رو نشون میده ! این عدد واسه چیه ؟
#include <cstdlib>
#include <iostream>

using namespace std;
class zarb{
int i ;
public :
zarb(int n){ i = n ;}
int get(){ return i ;}
void set(int n) { i = n ;}
};
int res(zarb ob){

ob.set( ob.get() * ob.get());
cout << ob.get()<< endl ; }


int main(int argc, char *argv[])
{
zarb p(10) ;
cout << res(p) << endl ;
cout << p.get() << endl ;

system("PAUSE");
return EXIT_SUCCESS;
}

fati63
یک شنبه 26 آذر 1391, 18:49 عصر
اینکه 8 تا خطا داره؟؟؟؟کد درستش بذار

smemamian
یک شنبه 26 آذر 1391, 18:59 عصر
توی Dev ++c هیچ مشکلی نداره !

rezaricky
یک شنبه 26 آذر 1391, 19:59 عصر
مشکل تو تابع res هست که هیچی بر نمیگردونه.

smemamian
یک شنبه 26 آذر 1391, 20:05 عصر
مشکل تو تابع res هست که هیچی بر نمیگردونه.

با ویژوال استادیو همچین اروری میده ولی با Dev همچین پیغامی نمی ده !

rezaricky
یک شنبه 26 آذر 1391, 20:29 عصر
بستگی به کامپایلر داره، احتمالا کامپایلر dev مقدار برگشتی دستور cout رو بر میگردونه
ولی به هر صورت تابع res یا باید یک عدد صحیح بر گردونه یا مقدار برگشتیش از نوع void تعریف بشه

omidshaman
یک شنبه 26 آذر 1391, 20:49 عصر
فانکشن ها رو توی یک خط تعریف نکن خوانایی برنامه میاد پایین!...
zarb(int n){ i = n ;}
int get(){ return i ;}
void set(int n) { i = n ;}
و البته باید فانکشن ها رو هم بیرون کلاس تعریف کرد نه داخلش ...
داخل کلاس برای Function Declarations ه یعنی این که چه ورودی ها و خروجی هایی داره تعریف خود فانکشن باید بیرون از کلاس باشه

smemamian
یک شنبه 26 آذر 1391, 21:37 عصر
فانکشن ها رو توی یک خط تعریف نکن خوانایی برنامه میاد پایین!...
zarb(int n){ i = n ;}
int get(){ return i ;}
void set(int n) { i = n ;}
و البته باید فانکشن ها رو هم بیرون کلاس تعریف کرد نه داخلش ...
داخل کلاس برای Function Declarations ه یعنی این که چه ورودی ها و خروجی هایی داره تعریف خود فانکشن باید بیرون از کلاس باشه

خب به صورت inline هستن دیگه !

omidshaman
یک شنبه 26 آذر 1391, 21:51 عصر
خب به صورت inline هستن دیگه !
خوب ربطی نداره inline ها رو هم میشه این جوری تعریف کرد
البته من دلیلی نمی بینم همه inline تعریف بشن فقط constructor به نظر من توجیه داره
حالا به هر حال

#include <cstdlib>
#include <iostream>

using namespace std;
class zarb
{
public :
zarb(int n){ i = n ;}
int get(void);
void set(int i) ;
private:
int i;
};
inline int zarb::get()
{
return i;
}
inline void zarb:: set(int n)
{
i=n;
}

void res(zarb ob);
void res(zarb ob)
{
ob.set( ob.get() * ob.get());
cout << ob.get()<< endl ;
}
int main()
{
zarb p(10) ;
res(p) ;
cout << p.get() << endl ;
system("PAUSE");
return EXIT_SUCCESS;
}

smemamian
یک شنبه 26 آذر 1391, 21:55 عصر
inline ها در توابع کوچک استفاده می شن و شاید گاهی لازم نباشه در سازنده ها هم تعریف بشن .

ممنونم .

omidshaman
یک شنبه 26 آذر 1391, 22:08 عصر
inline ها در توابع کوچک استفاده می شن و شاید گاهی لازم نباشه در سازنده ها هم تعریف بشن .

ممنونم .
به هر حال من هیچ وقت داخل کلاس فانکشن ها رو تعریف نمی کنم حالا چه inline یا غیر inline
این که inline تعریف کنی یا نه هم فرقی نداره کمپایلرهای جدیدتر خیلی وقتا بعضی فانشکن ها رو تبدیل به inline میکنه
این جوری کد خیلی مرتب تره مخصوصا توی برنامه های بزرگ که لازمه کلاس یک هدر داشته باشه با یک source فایل از همین الان عادت کنی بهتره