با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش ++C در خدمت شما دوستان هستیم . در بخش قبلی با شی گرایی در ++C آشنا شدید،
در این جلسه قصد داریم تا به آموزش سازنده ها در ++C و سربارگذاری سازنده ها در ++c بپردازیم.
سازنده (Constructors) تابعی خاص است که هنگام تعریف اشیا اجرا می شود و برای مقدار دهی اولیه به اعضا شی به کار می رود.
نام سازنده باید همنام کلاس باشد و هیچ مقداری را برنگرداند.
همپنین سازنده همیشه public است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ... .. ... class temporary { private: int x; float y; public: // Constructor temporary(): x(5), y(5.5) { // Body of constructor } ... .. ... }; int main() { Temporary t1; ... .. ... } |
در کد بالا، ()temporary یک سازنده است.
هنگامی که یک شی از کلاس temorary ایجاد می شود، سازنده به طور خودکار اجرا می شود و x مقدار ۵ و y مقدار ۵٫۵ را به خود می گیرد.
همچنین می توانید اعضا داده را به صورت زیر مقداردهی کنید:
1 2 3 4 5 | temporary() { x = 5; y = 5.5; } |
فرض کنید که می خواهید ۱۰۰ شی از کلاس person ایجاد کنید و مقدار پیشفرض عضو داده age عدد ۰ است.
مقداردهی تام اشیا به صورت دستی کار خسته کننده است.
در عوض می توانید یک سازنده تعریف کنید که age را مقدار دهی اولیه کند.(مقدار آن را ۰ کند)
حالا بعد از اینکه هر شیی را تعریف کردید، عضو داده age به صورت خودکار مقدار ۰ را به خود می گیرد.
همچنین اگر می خواهید مقداری کد را بلافاصله بعد از ایجاد شی اجرا کنید، سازنده ها گزینه مفیدی هستند.
در برنامه زیر مساحت یک مستطیل را محاسبه خواهیم کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <iostream> using namespace std; class Area { private: int length; int breadth; public: // Constructor Area(): length(5), breadth(2){ } void GetLength() { cout << "Enter length and breadth respectively: "; cin >> length >> breadth; } int AreaCalculation() { return (length * breadth); } void DisplayArea(int temp) { cout << "Area: " << temp; } }; int main() { Area A1, A2; int temp; A1.GetLength(); temp = A1.AreaCalculation(); A1.DisplayArea(temp); cout << endl << "Default Area when value is not taken from user" << endl; temp = A2.AreaCalculation(); A2.DisplayArea(temp); return 0; } |
در مثال بالا یک سازنده تعریف شده مه lenght را به ۵ و breadth را به ۲ مقدار دهی می کند.
خروجی به شکل زیر می باشد:
1 2 3 4 5 | Enter length and breadth respectively: 6 7 Area: 42 Default Area when value is not taken from user Area: 10 |
چون برای شی A2 هیچ مقداری را از کاربر دریافت نکرده ایم، مساحت با مقدار های پیش فرض محاسبه شده است.
سازنده ها نیز می توانند مانند توابع سربارگذاری شوند.
سازنده های سربار گذاری شده نامی یکسان اما پارامتر های مختلف دارند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <iostream> using namespace std; class Area { private: int length; int breadth; public: // Constructor with no arguments Area(): length(5), breadth(2) { } // Constructor with two arguments Area(int l, int b): length(l), breadth(b){ } void GetLength() { cout << "Enter length and breadth respectively: "; cin >> length >> breadth; } int AreaCalculation() { return length * breadth; } void DisplayArea(int temp) { cout << "Area: " << temp << endl; } }; int main() { Area A1, A2(2, 1); int temp; cout << "Default Area when no argument is passed." << endl; temp = A1.AreaCalculation(); A1.DisplayArea(temp); cout << "Area when (2,1) is passed as argument." << endl; temp = A2.AreaCalculation(); A2.DisplayArea(temp); return 0; } |
برای شی A1 هیچ آرگومانی هنگام ایجاد شی ارسال نشده است.
بنابراین سازنده بدون پارامتر برای این شی اجرا خاهد شد که length را به ۵ و breadth را به ۲ مقداردهی می کند.
برای شی A2 مقادیر ۲ و ۱ به هنگام ایجاد شی ارسال شده اند.
بنابراین سازنده دو عضو داده را با این مقادیر مقداردهی می کند.
خروجی به شکل زیر می باشد:
1 2 3 4 | Default Area when no argument is passed. Area: 10 Area when (2,1) is passed as argument. Area: 2 |
یک شی می تواند از طریق شی دیگر با همان نوع مقداردهی شود. این کار محتوا یک شی را به شی دیگر کپی می کند.
در برنامه بالا اگر بخواهید یک شی دیگر به نام A3 تعریف کنید که مقادیر شی A2 را بگیرد، تابع main به صورت زیر تغییر می کند:
1 2 3 4 5 6 7 8 9 | int main() { Area A1, A2(2, 1); // Copies the content of A2 to A3 Area A3(A2); یا, Area A3 = A2; } |
در اینجا اعضا داده شی A3 مقدار اعضا شی A2 را گرفته اند.
شاید با خود فکر کنید که برای این کار لازم است تا سازنده ای جدید ایجاد کنید، اما این کار لازم نیست.
جلسه سازنده ها در ++C نیز به پایان رسید.
در جلسه بعد به آموزش ارسال اشیا به توابع در ++C خواهیم پرداخت. با ما همراه باشید.