PDA

View Full Version : مقداردهی به تابع در سی!



Fl03xet1ne
چهارشنبه 29 شهریور 1391, 23:19 عصر
سلامی دوباره.
امروز داشتم یک سورس از برنامه های سی رو نگاه می کردم که تابع درون کلاس به صورت زیر تعریف شده بود.

class counter
{
protected:
unsigned int count;
public:
counter() : count(0)
{}
counter(int c) : count(c)
{}
unsigned int get_count() const
{ return count;}
counter operator++()
{ return conuter(++count);}
};


می خواستم بدونم چرا تابع counter به این شکل تعرف شده؟! counter() : count(0) آیا دلیل خاصی داره؟! و کلا کاربرد این روش چیه؟!!!
و این روش مقدار دهی به تابع مربوط به کدام قسمت از روش های برنامه نویسی سی پلاس پلاس میشه؟!

hadi0x7c7
پنج شنبه 30 شهریور 1391, 00:30 صبح
کلا این یه مدل مقدار دهی به attribute های کلاس میباشد و هیچ فرقی با این نداره
counter(int c)
{
count = c;
}


فکر کنم بهش initialization list میگن.

http://www.cprogramming.com/tutorial/initialization-lists-C++‎.html

Fl03xet1ne
پنج شنبه 30 شهریور 1391, 00:39 صبح
سلام اون لینک ارور
Error 404: This page could not be found.

دادش.

hadi0x7c7
پنج شنبه 30 شهریور 1391, 00:59 صبح
به خدا من به این سایت رفتم اینم مدرک

93121

mr AHR
پنج شنبه 30 شهریور 1391, 14:21 عصر
دو جور ارث بری وجود داره یکی Inheritance و دیگری composition در نوع اول همون ارث بری هستش که ازش خبر دارین ...
دومی یعنی یک آبجکت مثلا از نوع a فیلدش آبجکتی از نوع b باشه ( مثلا تو ماشین آبجکت های چرخ و ... هستش )
مثلا ممکنه یک کلاس تعریف کنین که قرارق رنگ رو مشخص کنه ( مثلا به اسم Color ) و یک constructor داشته باشه که اسم رنگ رو ورودی میگیره
class Color {

public:
string name;

Color (string colorName) {
name = colorName;
};

};
یه کلاس دیگه هم داری مثلا توپ که رنگ داره ( از نوع Color ) و شعاع داره ( از نوع float ) به نظر شما چجوری میتونیم در constructor مقدار Color رو تعیین کنیم ؟؟؟ درست عین چیزی که در پایین مشخص کردم ( دقت کنید نام فیلد مهمه نه نوعش مثلا اگر یه رشته به اسم name داریم جولوی name آرگومان ها رو میاریم .)
class Ball {

public:
Color color;

float radius;

Ball (string ballColor, float ballRadius):color(ballColor)
{
radius = ballRadius;
};
};

حالا در مثال میشه همین حالتو برای float هم در نظر گرفت یعنی بنویسی
Ball (string ballColor, float ballRadius):color(ballColor),radius(ballRadius)
که یعنی کانستراکتور float رو به ازای مقدار ورودی اجرا کنی ! ( دقت کن که در مورد آبجکت های معمولی اگر نمیخوای چنین کاری کنین باید Copy Constructor براش در نظر بگیری و تو فیلد ها هم مقدار دهیش کنین ، حالا چه با Default Constructor چه با مقدار دلخواه بعد مثل int و ... نیازی به این فیلم ها نداره )