Submit Search
Advance programming c++
1 like
42 views
A
AliNazarizadeh
Advance programming c++
Engineering
Read more
1 of 95
Download now
Download to read offline
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
More Related Content
PDF
Amjadi - Ebook 5 - Function - v1
Mohammad Amin Amjadi
PDF
Jozve c#3 mohamady
danesh_fd
PDF
Quantom
danesh_fd
PDF
Jozve c#2 mohamady_zahedy
danesh_fd
PDF
MIPS and QtSpim
Mohammad Kadkhodaei
PPTX
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
mrm_196
PDF
Mohamady zahedy c#
danesh_fd
PDF
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
Hamid Saberi
Amjadi - Ebook 5 - Function - v1
Mohammad Amin Amjadi
Jozve c#3 mohamady
danesh_fd
Quantom
danesh_fd
Jozve c#2 mohamady_zahedy
danesh_fd
MIPS and QtSpim
Mohammad Kadkhodaei
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
mrm_196
Mohamady zahedy c#
danesh_fd
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
Hamid Saberi
Similar to Advance programming c++
(20)
PDF
Amjadi - Ebook 6 - Ref,Out - v1
Mohammad Amin Amjadi
PPT
Flowchart
mpetroleum
PPT
C++
guestdcb75
PPT
C++
guestdcb75
DOCX
برنامه سازی3
mahdiehsalari
PDF
Radmanesh c#-1
neginrmn
PDF
How to program with c in persian
moein jazemi
PPTX
آشنایی با زبان جاوا - مقدماتی اندروید
Sadegh Ghanbari Shohani
PDF
Learn orcad 9.2
Micro Designer Electronic
PDF
بخش اول :كاربرد رايانه در برق (آموزش ساده سيمولينك )
tahereh sharafi
PDF
2 arrays in c++ programming aramse
Aram SE
PPTX
C-1.pptx
Mojtaba Aajami
PPTX
DB_fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf5_SQL.pptx
ampourarab111
PDF
الدالات الأساسية-في-برنامج-الإكسل
Mahmoud Abd Elrahman
DOCX
نرم افزار3 خرداد
mahdiehsalari
PDF
Amjadi - Ebook 7 - Class - v1
Mohammad Amin Amjadi
PDF
امتحان دی ماه وب مقدماتی
somayeh daneshparvar
PDF
Software Fault Avoidance in Implementation
Morteza Zakeri
DOCX
Barnamesazi1c#
somyashabani
PDF
آموزش نرم افزار MSP
Raman Rezaei, PMP
Amjadi - Ebook 6 - Ref,Out - v1
Mohammad Amin Amjadi
Flowchart
mpetroleum
C++
guestdcb75
C++
guestdcb75
برنامه سازی3
mahdiehsalari
Radmanesh c#-1
neginrmn
How to program with c in persian
moein jazemi
آشنایی با زبان جاوا - مقدماتی اندروید
Sadegh Ghanbari Shohani
Learn orcad 9.2
Micro Designer Electronic
بخش اول :كاربرد رايانه در برق (آموزش ساده سيمولينك )
tahereh sharafi
2 arrays in c++ programming aramse
Aram SE
C-1.pptx
Mojtaba Aajami
DB_fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf5_SQL.pptx
ampourarab111
الدالات الأساسية-في-برنامج-الإكسل
Mahmoud Abd Elrahman
نرم افزار3 خرداد
mahdiehsalari
Amjadi - Ebook 7 - Class - v1
Mohammad Amin Amjadi
امتحان دی ماه وب مقدماتی
somayeh daneshparvar
Software Fault Avoidance in Implementation
Morteza Zakeri
Barnamesazi1c#
somyashabani
آموزش نرم افزار MSP
Raman Rezaei, PMP
Ad
Advance programming c++
1.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 1 میحالرمنحالرهللامسب :درس جزوه نویسی برنامهپیشرفته زاده نظری علی : نویسنده کرمانشاه واحد اسالمی آزاد دانشگاه سال ماه بهمن4913
2.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 2 نویسی برنامه بر ای مقدمه :اول فصل تمامی درکرد اعالن زیر های روش از یکی با را ها آن و کرد مشخص را متغییرها نوع باید نویسی برنامه های زبان 1-: intمانند صحیح اعداد از خود برنامه در بخواهیم اگر62یا652این به را خود متغییر باید ،کنیم استفاده ... یا صورت.کنیم اعالن:رو روبه مانندint a;ک این یعنیمتغییر هaاعداد تواند می فقط و باشد می صحیح عدد نوع از دهد اختصاص خود به را صحیحمقدار اگر مثال .aعدد با مساوی را5266و شویم می مواجه خطا با بدهیم قرار .شود نمی اجرا برنامه 6-floaمانند اعشاری اعداد از خود برنامه در بخواهیم اگر :6.62یا4569اس ... یارا خود متغییر باید ،کنیم تفاده :رو روبه مانند .کنیم اعالن صورت این بهfloat a;متغییر که این یعنیaنوع ازعدد.باشد می اعشاری .-doubleاندازه دقت که تفاوت این با گیرد می قرار استفاده مورد اعشاری اعداد برای نیز ای داده نوع این : بیش آن گیریو باشد می تردهد می نشان ممیز از بعد را تری بیش اعداد:رو روبه مانند .double a;. 9-bool:: (صحیح حالت دو شامل فقط ای داده نوع اینtrue: نادرست وfalseزمانی برای تر بیش و باشد می ) :رو روبه مانند .بسنجیم را مقدار یک نادرستی یا درستی که کنیم می استفاده آن ازbool a;. 5-charاین به را خود متغییر باید ،کنیم استفاده )عالمت یک یا حرف (یک کاراکتر از خود برنامه در بخواهیم اگر : :رو روبه مانند .کنیم بیان صورتchar k;متغییر که این یعنیkمانند حرف یک یا کاراکتر یک شامل: (a , #, Z, s.باشد می ... یا ) 2-stringدارد نام )(رشته که کاراکترها از ای مجموعه شامل ای داده نوع این :.باشد می ،برای تر بیش روش این ا مورد زمانینکته این به .کنیم دریافت ورودی از را ... یا خانوادگی نام یا نام مثال بخواهیم که گیرد می قرار ستفاده نا دریافت برای که کنید دقت خوبمخانوادگی نام یاکنیم می عمل صورت این به افراد: String str; ای رشته نوع از str متغییر اعالن cin>>str; cin دستور از استفاده با str ی رشته دریافت cout<< " Ali "; برنامه خروجی نام به متدی از ،هم با خانوادگی نام و نام دریافت برای اماgetline(cin, name).کنیم می استفادهزیر صورت به که :باشد می string str; ای رشته نوع از str متغییر اعالن getline(cin, str); getline(cin, str) دستور از استفاده با str ی رشته دریافت cout<< " Ali Nazarizadeh " برنامه خروجی :بینید می که طور همانcin،برسد کلمات بین خالی فضای به که هنگامی و دارد را کلمه یک دریافت توانایی فقط تابع از مشکل این حل این برای .ندارد را کلمات بقیه دریافت توانایی و کند می دریافت ورودی از را کلمه اولین فقط getline(cin, name)تابع این که کنیم می استفادهتابع این .دارد ورودی از را ها رشته گرفتن تواناییدو دارای پا که باشد می پارامترراشی اول مترcinوآن باشد میج همان را،دوم پارامتر در و نویسم می وریمورد رشته اسم ،رشته اسم جا این در که نویسیم می را نظرstr.باشد می نکته1-1دستور از :cinداده گرفتن برایدستور از و هاcoutنمای برایش.کنیم می استفاده ها داده
3.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 3 نکته1-6زبان به که ای برنامه هر ابتدای در :C++برنامه اول به را ای کتابخانه فایل دو این باید حتما نویسیم می :کنیم اضافه #include<iostream.h> cout و cin به مربوط ای کتابخانه فایل #include<conio.h> getch() تابع به به مربوط ای کتابخانه فایل زبان به برنامه یک ساختارC++:باشد می زیر صورت به #include<iostream.h> #include<conio.h> int main() { … ... ...; … ... ...; main() تابع داخل در برنامه نوشتن و دستورات سازی پیاده … ... ...; getch(); مش خروجی در را خود های داده کاربر تا دارد می نگه را نمایش صفحه ،تابع اینکند اهده return 0; ک درست برنامه که شود مطمعن تا دهد می بازگشت برنامه به را صفر مقدار تابع اینکند می ار } 1-1شرطی دستورات و تکرار های حلقه کن می استفاده ها برنامه نوشتن برای خاص ترفند چند از نویسی برنامه در،ها آن اساس و پایه که یمها حلقهو شرطی دستوراتزبان در .باشند میC++شرطی یا تکرار حلقه نوع چهاراز اند عبارت که دارد وجود: 1-دستورifی کلمه :ifمعنی به)ا دستوری های شرط برای تر بیش و باشد می )اگربنابراین .شود می استفاده آن ز داشت برنامه در شرط یک برقراری به نیاز ما که هرگاهد یا یمدستور این از ،آمد )(اگر ی کلمه سوال صورت ر گیرد می قرار استفاده مورد روش دو به دستور این .کنیم می استفاده:باشد می زیر صورت به اول .روش if ( برنامه شرط ) { بده انجام را قسمت این دستورات ،بود درست برنامه شرط اگر } صورت این غیر درelse { بده انجام را قسمت این به مربوط دستورات { else } ;... ...... {
4.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 4 :آید می زیر صورت به دوم روش if( شرطاولبرنامه ) { شرط اگراولبده انجام را قسمت این دستورات ،بود درست برنامه } else if ( برنامه دوم شرط ) { شرط گردومبود درست برنامهبده انجام را قسمت این دستورات ، { else if ( برنام سوم شرطه ) { شرط گرسومبود درست برنامهبده انجام را قسمت این دستورات ، { … … …; … … …; مثال1-1عدد خروجی در بود رقمی یک اگر و کند دریافت ورودی از را عددی که بنویسید ای برنامه :1چاپ را عدد بود رقمی دو اگر ،کند6عدد بود رقمی سه اگر ،کند چاپ را.را.آخر الی و کند چاپ #include<iostream.h> #include<conio.h> int main() { int a; cout << "enter a number: "; cin >> a; if (a <= 9) { cout << "1"; } else if (a <= 99) { cout << "2"; } else if (a <= 999) { cout << "3"; } else if (a <= 9999)
5.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 5 { cout << "4"; } getch(); return 0; } برنامه توضیحعدد مساوی تر کوچک رقمی یک اعداد :4دستور در بنابراین ،باشند میifقرار را شرط این اولی کو ورودی عدد اگر که ایم دادهعدد مساوی یا تر چک4را باشد می رقمی یک عدد که این بر مبتنی پیغامی ،بود کند چاپتر کوچک ورودی عدد اگر اگر ولییاعدد مساوی4دستور به برنامه نبودifدستور در و رود می بعدی کوچک ورودی عدد اگر که کند می چک بعدیعدد مساوی تر44می رقمی دو عدد که این بر مبتی پیغام یک ،بود م چک تک به تک را بعدی های شرط برنامه صورت همین به و کند چاپ را باشد.کند ی 6-ی حلقهforی کلمه :forکنیم می استفاده شمارشی عملیات انجام برای حلقه این از و باشد می )(برای معنی به. بین اعداد مثال خواستیم ای برنامه در هرگاه111تا611کنیم شمارش ... یایا دهیم نمایش خروجی در را ها آن و را بعد محل تا محل یک از خواستیم که اینکنی پیمایشکنیم می استفاده حلقه این از ،ممی نوشته زیر صورت به که :شود for ( مبدا ; مقصد ; حرکت گام ) مثال1-6بنویسی ای برنامه :داعداد کهبین16تا161.دهد نمایش خروجی در را #include<iostream.h> #include<conio.h> int main() { int i; صحیح عدد نوع از i متغییر اعالن for (i = 16; i <= 180; i++) for حلقهی { cout << i << " "; کند می چاپ خروجی در را i متغییر } getch(); return 0; } برنامه توضیحکه طور همان :قبل دری حلقه از اعداد شمارش برای ،گفتیمforاگفته مثال این در .کنیم می ستفاده شدهکه استبین اعداد12تا161ی حلقه یک بنابراین ،کند چاپ راforمانند متغییر یک مثال که نویسیم میiرا عدد همان که مبدا عدد با مساوی12و دهیم می قرار باشد میعدد با مساوی نیز را مقصد عدد161و دهیم می قرار مقدارiر اعداد ی همه تا کنیم می اضافه واحد یک واحد یک را،کند شمارش را عددی که هم بار هر و کند پیمایش ا خروجی دستور از استفاده با را آنcout.کند می چاپ خروجی در .-حلقهیwhileکلمه :یwhileزما (تا معنی بهباشد می )که نیدستور های قابلیت اغلب تقریبا وifی حلقه و forدارد را:شود می نوشته زیر صورت به که
6.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 6 while ( است برقرار شرط این که زمانی تا ) { بده انجام را قسمت این دستورات } مثال1-.بزرگ دریافتی عدد که زمانی تا و کند دریافت ورودی از را عدد تعدادی که بنویسید ای برنامه :از تر ،بود صفردهد نمایش خروجی در را خودش در عدد ضرب حاصلوخود کار به برنامه.دهد ادامهعدد اگر اما کوچک دریافتی.برسد پایان به برنامه ،بود صفر از تر #include<iostream.h> #include<conio.h> int main() { int i = 0; while (i >= 0) { cout << "enter a number: "; cin >> i; cout << i *i << endl; } getch(); return 0; } توضیح:برنامهمتغییر ابتدا درiداده نسبت آن به را صفر مقدار ابتدا در و ایم کرده معرفی صحیح عدد نوع از را متغییر که کنید دقت .ایمiی حلقه داخل در .کنیم دریافت ورودی از است قرار که باشد می عددی همانwhile عبارتi>=0زم تا که باشد می معنی بدین این ،است شده نوشتهبزرگ دریافتی عدد که انیباشد می صفر مساوی تر در ضرب کنیم می دریافت ورودی از که را عددی هر هم آخرسر در و کنیم دریافت ورودی از عدد توانیم میخودش .کنیم می 9-حلقهیswitch / caseکلمه :switchم بهی کلمه و )کردن کنترل یا (کلید عنیcaseم بهعنمی )(مورد ی حلقه این .باشددستور های قابلیت تر بیش انجام توانایی تقریباifاینجام برای توان می نیز حلقه این از .دارد را .کرد استفاده شرطی دستوراتصحیح عدد ای داده نوع از فقط حلقه این که کنید دقت نکته این به(int)کاراکتر و (char)دیگر پس کرد استفاده ها حلقه این از توان می داده نوع دو این با کار برای که این یعنی .کند می پشتیبانی م توان نمیثالها رشته(string)اعشاری اعداد یا(float).داد انجام حلقه این از استفاده با رازیر صورت به که :شود می نوشته switch ( اس قرار که متغییری نوشتنتبگیرد قرار بررسی مورد ) { case 1: cout << "one"; این دستورات ،بود درستبده انجام را خط case قسمت شرط اگر break; صورت این غیر در case 2: cout << "two"; د ،بود درستبده انجام را خط ایت ستورات case قسمت شرط اگر break; صورت این غیر در
7.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 7 case 3: cout << "there"; ... ... ... break; ... ... ... case 4: cout << "four"; ... ... ... break; ... ... ... default: cout << "Erorr"; case قسمت دستورات از کدام هیچ نبودن درست صورت در } بده انجام را default دستورقسمت به مربوط مثال1-9:که بنویسید ای برنامهورودی از را چهار تا یک از اعداددر را کدام هر انگلیسی معادل و کند دریافت .دهد نمایش خروجی #include<iostream.h> #include<conio.h> int main() { int n; cin >> n; switch (n) { case 1: cout << "one"; break; case 2: cout << "two"; break; case 3: cout << "there"; break; case 4: cout << "four"; break; default: cout << "Erorr"; } getch(); return 0; } برنامه توضیحدستور داخل در را دهیم قرار بررسی مورد برنامه در است قرار که را متغییری ابتدا :switchمی دستورات از استفاده با و نویسیمcaseاولین در مثال .دهیم می قرار بررسی مورد را قسمت هر ،caseعدد1می را این یعنی ،نویسیممورد اگر کهنظرعدد ما1عدد ایم کرده وارد که را عددی همان یا1خروجی در ،بودoneرا دستور از استفاده با سپس کن چاپbreakاولین اگر و کنیم می قطع را برنامهcaseسراغ به نبود صحیح ماcase دست و برود بعدیق در .دهد انجام را قسمت آن وراتسمتو عدد اگر که است شده نوشته نیز بعدیرودی6در ،بود خروجیtwoکن راچاپدام .ااز کدام هیچ اگرcaseدستور ،نبود درست ما هایبرنامه فرض پیش قسمت به مربوط همان یاdefault.بده انجام را
8.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 8 1-6آرها ایه ورودی از را عدد یک فقط ما قبل های مثال در .شود می فراوانی های استفاده ها آرایه از نویسی برنامه دردریافت کردیماتعداد نمرات مثال بخواهیم اگر ما111دانچکا کنیم دریافت را شجوباید راز ما مسلما داد؟ انجام111متغییر کنیم نمی استفاده باشد می عدد یک به مربوط کدام هر کهمی استفاده ها آرایه از که است صورت این در ،کنیم. نکته1-.ی حلقه یک حتما باید ،کنیم می استفاده ها آرایه از که وقتی همیشه :forیعنی .ببریم کار به برنامه در نیز ی حلقه از ها داده نمایش و دریافت برای همیشهforزیر مثال مانند .کنیم می استفاده: نکته1-9ها داده نمایش برای :آرایه یک قالب در،:کنیم می عمل زیر صورت به ];ها داده تعداد[بازگشتی نوع آرایه اسم شامل که ای رشته نوع از ای آرایه.رشتهباشد میstring name [3]; صحیح عدد نوع از ای آرایهکهشامل.خانه یا عددباشد میfloat score [3]; مثال1-5ی شماره و نام که بنویسید ای برنامه :.آموز دانشخروجی در را ها آن و کند دریافت ورودی از را .دهد نمایش #include<iostream.h> #include<conio.h> #include<string> int main() { string name[3]; float score[3]; int i; for (i = 0; i < 3; i++) { cout << "name " << i + 1 << ": "; cin >> name[i]; cout << "score " << i + 1 << ": "; cin >> score[i]; } for (i = 0; i < 3; i++) { cout << name[i] << " " << score[i] << endl; } getch(); return 0; } برنامه توضیح:آرایه یک برنامه ایننام بهnameو باشد می ای رشته نوع از که داردآن های خانه تعداد.می باشدنام به آرایه یک چنین هم وscoreاز را هرکدام نمره و نام ترتیب به که دارد دانشجویان های نمره ذخیره برای دریافت ورودیرا ها آن و کند می.دهد می نشان خروجی در
9.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 9 1-.تابع برنا در تکراری دستورات نوشتن از جلوگیری و کردن خالصه ،کردن تر ساده برای نویسی برنامه درکاهش و مه کنند می استفاده توابع از برنامه حجمابتدا یعنی .کنیم می استفاده متغییرها تعریف همانند نیز تابع یک تعریف برای . نویسیم می را تابع نام سپس و تابع بازگشتی نوعاین تابع تشخیص راه ،که گفت توان می تر ساده خیلی صورت به . همی تابع که استشعالمت دارای همی پارامتر فاقد که این یا دارد وجود پارامتر یا آن داخل در که باشد می پرانتر :کنیم می عمل زیر صورت به ،تابع یک اعالن برای کلی طور به .باشد ;(...,دوم پارامتر,اول پارامتربازگ نوع تابع نام )تابع شتی int insert (int a, int b); نکته1-5بر عالوه :2نام به بازگشتی جدید نوع یک ،داشتیم متغییرها برای که بازگشتی نوع(void)توابع برای نیز .دهد نمی بازگشت را مقداری هیچ ای داده نوع این .بریم می کار به نکته1-2صورت به تابعی بازگشتی نوع اگر :2از غیر که این یعنی ،باشد قبل حالتvoidباشدبا را آن باید ، خروجی دستور از استفادهcoutصورت به تابعی بازگشتی نوع اگر اما .بنویسیم خروجی درvoidرا آن نباید ،باشد .بنویسیم خروجی در نکته1-7همان جزء ها آن بازگشتی نوع که توابعی برای :2بود کردیم بیان متغییرها برای که نوعیداخل در باید ، بازگشتی دستور از متدreturnبا نوع اگر اما .کنیم استفادهما زگشتیvoidبازگشتی دستور از توانیم نمی دیگر ،بود returnباز را متغییری و کنیم استفاده.دهیم گشت :از اند عبارت که دارد بازگشتی نوع یک تابع هر .کرد مشخص را آن نوع باید ،متغییرها سایر مانند نیز توابع 1-صحیح مقدار یک(int)را صحیح اعداد تابع حالت این در :.دهد می بازگشت 6-اعشاری مقدار یک(float).دهد می بازگشت را اعشاری اعداد تابع حالت این در : .-اعشاری مقدار یک(double).دهد می بازگشت باالتری دقت با را اعشاری اعداد تابع حالت این در : 9-غلط یا صحیح مقدار یک(bool)صحیح مقدار یا تابع حالت این در :(true)غلط مقدار که این یا(false)را .دهد می بازگشت 5-کاراکتری مقدار یک(char).دهد می بازگشت را کاراکترها تابع حالت این در : 2-ای رشته مقدار یک(string).دهد می بازگشت را ای رشته تابع حالت این در : 7-بازگشتی نوع بدون(void)را مقداری هیچ تابع حالت این در :.دهد نمی بازگشت مثال1-2ورودی از را فردی امروز تارخ و تولد تاریخ که بنویسید ای برنامه :ت از استفاده با و کند دریافتابعی ر چند که کند مشخص.است گذشته شخص این عمر از وز #include<iostream.h> #include<conio.h> int calculate(int year1, int month1, int day1, int year2, int month2, int day2) { int y, m, d, result; y = year2 - year1; m = month2 - month1; if (m < 0) {
10.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 10 m *= -1; } d = day2 - day1; if (d < 0) { d *= -1; } result = (y * 365) + (m * .1) + (d); return result; } int main() { int year1, month1, day1, year2, month2, day2; cout << calculate(1374, 9, 15, 1394, 11, 21); getch() return 0; } برنامه توضیح:به ما2تای سه و روز و ماه و سال براساس فرد تولد تاریخ ی دهنده نشان ها آن تای سه که متغییر امروز تاریخ ی دهنده نشان بعدیا برروز و ماه و سال ساسباشد میداریم نیازکافی فقط ،روزها ی محاسبه برای . تول سال از را حال سال ترتیب به که استدکن کم تولد روز از را حال روز و تولد ماه از را حال ماه وتعدا سپس .یم د به که را هایی سالدر را آید می ست.25را آید می دست به که را هایی ماه تعداد ودر.1با نیز ها روز تعداد و دقت .آوریم بدست را فرد یک عمر روزهای تعداد تا کنیم می جمع هم با را متغییر سه این و نویسیم می صورت همان کنیدمتغییر برای کهmمتغییر و ها ماه تعداد ی دهنده نشان کهdیک از باشد می روزها تعداد ی دهنده نشان که دستورifکرده استفاده.ایمرا تولد ماه ما اگر مثال6را حال ماه و.نوشیتم که دستوری طبق ،کنیم وارد 3-8=-5آن ،باشد تر کم صفر از آمده دست به عدد اگر که کنیم می چک خطا این از جلوگیری برای بنابراین باشد می در را-1.کنیم تبدیل مثبت به منفی از را عدد تا کنیم ضرب 1-9گرها اشاره می حافظه از هایی آدرس واقع در گرها اشاره .باشد می گرها اشاره ،نویسی برنامه مطالب ترین پرکاربرد از یکی باشن،گره اشاره ی نشانه .کند می اشاره ها داده به که دصورت بدین را گر اشاره یک مثال .باشد می ) * ( کاراکتر :کنند می بیانint *a; استفاده گرها اشاره ازاشاره ی وسیله به پویا های آرایه از استفاده ،ها آن ترین مهم از یکی که شود می زیادی های .گفت خواهیم بعدی فصل در را آن از استفاده نحوه که باشد می گرها
11.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 11 دوم فصلاشیاء و ها کالس : هر و االن تا .شد خواهیم آشنا گرا شی نویسی وبرنامه گرایی شی اصول با فصل این درآنمبانی " درس در که چه ساخت نویسی برنامه " به مربوط ،ایم خوانده " سازی برنامه و کامپیوتربعد به لحظه این از اما .باشد می " یافته قرار بررسی مورد را بری ارث و گرایی شی به مربوط مباحث وکال نداریم سروکار نوشتن برنامه نوع این با دیگر ای به باید البته .داد خواهیممبانی " درس در را آن ای پایه مقدمات و نویسی برنامه اصول تمامی که کرد دقت نکته ن آشنا " کالس " نام به نویسی برنامه از جدیدی ساختار با قسمت این در و ایم گرفته فرا " نویسی برنامه و کامپیوتر س صورت به را ایم گرفته فرا االن تا که مطالبی تمامی تقریبا و شد خواهیمکالس " یک قالب در جدید فرمی و اختار .کرد خواهیم سازی پیاده "بعد به لحظه این از که کنید دقتهمان ،تابع دیگر نام که این یعنی .گوییم می متد ،تابع به ، .باشد می متد ی کلمه کالساز ای مجموعه به :متغییرهاتوابع وبا و گیرند می قرار هم کنار ساختار و فرم یک در کهیک دیگر هم کمک بزرگ برنامه.گویند می کالس کنند می طراحی را شیسپس و کنیم می سازی پیاده و طراحی را خود کالس ابتدا ما که این یعنی .باشد می کالس یک از هایی نمونه : کالس آن از،.آوریم می وجود به را اشیایی نوع دو دارای کالس هراز اند عبارت که باشد می ای داده: 1-عضوprivateکنیم اضافه برنامه به باشد قرار که را هرمتغییری و گیرند می قرار متغییرها فقط قسمت این در : قسمت در را آن بایدprivateبه اتوماتیک طور به گیرند می قرار قسمت این در که هایی متغییر تمامی .بنویسیم در فقط متغییرها این و آیند می در خصوصی عضو صورتاز خارج و باشند می دسترسی قابل کالس خود داخل خصوصی اعضای به دسترسی حق ،کالسprivateقسمت در ندارد.حتی وجودmain(). 6-عضوpublicبنابراین .بنویسیم قسمت این در را ها آن باید کنیم سازی پیاده برنامه در است قرار که توابعی تمام : متغییر و توابع تمامی بنابراین .شود می نوشته قسمت این در متغییری ندرت به و آیند می توابع اکثرا قسمت این در قسمت در که هاییpublicقس در را ها آن توان می ،آیند میمتmain().داد قرار استفاده مورد برنامه اصلی قسمت سه از کلی طور به کالس هراز اند عبارت که شود می تشگیل: 1-به مربوط قسمتprivateوpublic.گوییم می " اول قسمت " آن به بعد به این از که 6-در موجود توابع فقط مرحله این در که کالس سازی پیاده به مربوط قسمتقسمتpublicخواهیم سازی پیاده را .گوییم می " دوم قسمت " آن به بعد به این از که کرد .-به مربوط قسمتmain()دهیم می قرار استفاده مورد ایم کرده طراحی که را کالسی قسمت این در که ،برنامه، .نامیم می " سوم قسمت " را مرحله این بعد به این از بنابراین از کالس هرکند می پیروی کلی فرم و قالب یکباشد می زیر صورت به که: #include<iostream.h> باشد می coutو cin اول خطتابع به مربوط : #include<conio.h> باشد می getch() دوم خطتابع به مربوط : class name سوم خطکالس اسم : { چهارم خطشود می باز ) } ( آکوالد : private: )اول قسمت ( private پنجم خطکلیدی کلمه : اول ;متغییر ششم خطمتغییرها معرفی : دوم ;متغییر ... ... ...
12.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 12 public: )اول (قسمت public کلیدی کلمه :نهم خط اول ;متد هشتم خطتوایع معرفی : دوم ;متد ... ... ... }; ( }; ) :صورت بدین .شود می بسته کالن می سی یک همراه به آکوالد :نهم خط اول متد د (قسمتوم) public قسمت در موجود توابع دهم خطسازی پیاده : { … … …; } دوم متد { … … …; } int main() )سوم (قسمت main() تابع یازدهم خط: … … …; main() تایع به مربوط کدهای … … …; getch(); خروجی صفحه کردن متوقف برای getch() تابع از استفاده :دوازدهم خط return 0; صفر مقدار دادن بازگشت برای return 0 اس :سیزدهم خطتابع از تفاده } برنامه توضیح:و باشد می قبل کد صورت به کالس یک اصلی ساختار ،کلی حالت درقرار که هایی کالس تمامی .کنند می پیروی قاعده این از کال ،کنیم طراحی است اول خطتایع به مربوط ای کتابخانه فایل خط این در :cinوcout.نویسیم می را خدوم طخط این در :مربوط فایلتابع بهgetch().نویسیم رامی سوم خطبرنامه قسمت این در :،کالس اسم.کنیم می مشخص را" کلیدی ی کلمه ابتدا کار این برایclass"می را نویسیم،کالس اسم ،فاصله یک با سپسرو روبه مانند .نویسیم می را خود:class book : چهارم خطآکوالد که این از بعد و کنیم می باز ) } ( آکوالد یک ،کردیم مشخص را خود کالس اسم که این از بعد (.کنیم می ،کردیم انتخاب " اول قسمت " را آن اسم قبال که برنامه قسمت اولین نوشتن به شروع ،کردیم باز را ) } پنجم خطکلیدی ی کلمه :private.نویسیم می را ششم خط:.نویسیم می را دهیم قرار استفاده مورد برنامه در است قرار که متغییرهایی ،قسمت این در هفتم خطکلیدی ی کلمه :public.نویسیم می را هشتم خط:ت قسمت این دررا کنیم طراحی است قرا که را وابعی.نویسیم می :نهم خط.رسید پایان به " اول قسمت " که باشد می معنی بدین این ،بندیم می را ایم کرده باز قبال که آکوالدی ،قسمت این در دهم خطقسمت در موجود توابع :publicمی قسمت این در را آن به مربوط کدهای و کنیم می سازی پیاده را نویسیم. یازدهم خطتابع :main()یک و نویسیم می راآکوالد( { )سازی پیاده که را کالسی قسمت این در و کنیم می باز .دهیم می قرار استفاده مورد ایم کرده دوازدهم خطتابع قسمت این در :getch()ک نویسیم می راکه باشد می این تابع این وظیفه هاجرا را برنامه وقتی ما تا کند می متوقف را خروجی صفحه ،کردیمخود برنامه از.کنیم استفاده سیزدهم خطآ ی مرحله در و :تابع نیز خرreturn 0نوع تابعی اگر که گفتیم هم قبل مطالب در .نویسیم می را از غیر آن بازگشتیvoidبازگشتی دستور ز استفاده با باید ،باشدreturnنیز جا این در .دهد بازگشت را مقدار یک تابع چونmain()بازگشتی نوع دارایintتابع این در همیشه که .دهد بازگشت را مقدار یک باید بنابراین ،باشد می .شود داده بازگشت صفر مقدار باید
13.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 13 است شده تشکیل اصلی قسمت سه از کالس هر : گیری نتیجهقسمت و دوم قسمت و اول (قسمت های نام با را ها آن که کردیم گذاری نام )سومصو به و ثابت آن نوشتن مراحل وباشد می دادیم توضیح قیل مثال در که رتی. نکته6-1پایان در همیشه :privateوpublicیک " اول قسمت " همان یاآکوالکالن می سی یک همراه به بسته د ( ; )آید می صورت بدین( }; )بنابر ..است رسیده پایان به برنامه اول قسمت که فهمیم می شکل این دیدن با این نکته6-6پیاده به مربوط قسمت در :" دوم قسمت " همان یا کالس سازیتوابعی تمامیقسمت در که راpublic .نویسیم می تابع همان خود داخل در را ها آن از کدام هر دستورات و کدها و کنیم می سازی پیاده ایم نوشته نکته6-.دستور :int n;متغییر که باشد می معنی بدینnصح عدد نوع ازهمان یا یحintبرنامه در اما .باشد می داخل در گرا شی نویسیmain()" سوم قسمت " همان یابلکه نویسیم نمی کدی چنین امکان حد تااز حالت این در ایجاد شی یک خود کالسرا خو کالس اسم اگر .کنیم میnumberگذاشتهداشت خواهیم حالت این در ،باشیم: number ob1; اینکه باشد می معنی بدین دستورob1نوع ازnumberکالس : که کند می بیان را مفهومی چنین بنابراین باشد می numberنوع از شی یکob1.دارد نکته6-9در همیشه :main()همان یابه نویسی کد نحوه " سوم قسمت "صورتزیرباشد می: 1-تابع ابتدا درmain().نویسیم می را 6-آکوالد یک( { ).کنیم می باز .-.نوییسیم می را کالس اسم 9-.کنیم می ایجاد شی یک ،کالس اسم از بعد 5-قسمت متدهای تک تک به شده ایجاد شی از استفاده با باید سپسpublicکه صورت بدین .باشیم داشته دسترسی نویسیم می را شی ابتدا،نقظه کاراکتر سپس( . )آ در و دهیم می قرار آن جلوی راو .نویسیم می را متد اسم خربه برای را دسترسی ی نحوه ترتیب همینجداگ طور به متد هرخط یک در و انه.نویسیم می مجزا ه " سازی برنامه و کامپیوتر مبانی " درس در قبال .کنیم می شروع ساده مثال یک با ابتداداشتیم ای برنامه مچین: مثال6-1ک دریافت ورودی از را عددی که بنویسید ای برنامه :.دهد نمایش خروجی در را آن و رده اول روش)کالس سازی پیاده (بدون: #include<iostream.h> #include<conio.h> int main() { int n; صحیح عدد نوع از n متغییر اعالن cout << "enter n: "; کند می چاپ پیغام یک cin >> n; n متغییر دریافت cout << n; برد می خروجی به را n متغییر getch(); return 0; }
14.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 14 ساختار از استفاده با را کالس باید حالت این در .کنیم سازی پیاده ها کالس از استفاده با را قبل مثال خواهیم می حال ک نهایت ودر کنیم سازی پیاده کردیم مشخص آن برای قبال که قالبی و:شود می طراحی زیر صورت به ما الس #include<iostream.h> #include<conio.h> class number { private: int n; n نام به متغییر یک public: void insert(); ها داده دریافت برای تابع یک void print(); ها داده نمایش برای تابع یک }; void number::insert() insert() متد سازی پیاده { cout << "enter a number: "; cin >> n; } void number::print() print() متد سازی پیاده { cout << n; } int main() شود می نوشته main() تابع ابتدا { کنیم می باز ( { ) آکوالد یک number ob1; آوریم می وجود به ob1 نام به شی یک سپس و نویسیم می را کالس اسم ob1.insert(); استفاده بااز public قسمت متدهای ی همه به باید ob1 شی ob1.print(); باشد داشته دسترسی ( . ) نقظه کاراکتر getch(); return 0; } کالس توضیحباال ی برنامه در :خروجی در و کند می دریافت ورودی از را عددی که ایم ه کرد طراحی را کالسی .کردیم طراحی ساده صورت وبه ها کالس بدون را برنامه این قبل صفحه در .دهد می نشان را آن اگ که کند می پیروی خاص ی قاعده یک از قبل توضیحالت همانند کالس این ساختارکالس هر باشیم داشته یاد به ری است شده تشکیل قسمت سه از.کند می پیروی قاعده این از نیز باال کالس که تاب یک ابتدا ،برنامه در عملی هر دادن انجام برای همیشهدهد انجام را نظر مورد کار که عیو آوریم می وجود به .کنیم می سازی پیاده باشد می " دوم قسمت " همان که کالس سازی پیاده قسمت در را تابع هر به مربوط کدهای سپس قسمت در همیشه متغییرها چون و آوریم می وجود به را متغییر یک ابتدا برنامه این درprivateبنابراین ،باشند می متغییرnقسمت در نیز راprivate.نویسیم میدریاف ورودی از را عددی " که است شده گفته برنامه این درآ و تن بنابر " دهید نشان خروجی در راکند دریافت ورودی از را نظر مورد عدد که داریم تابع یک به نیاز اینت وابع .ببرد خروجی به را نظر مورد عدد که داریم نیاز نیز را دیگریتابع مثال این درinsert()تابع و عدد دریافت وظیفه
15.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 15 print().دارد عهده بر را عدد چاپ وظیفهمتد داخل درinsert()دستور از استفاده باcinمتغییرnورودی از را کند می دریافتمتد داخل در وprint()دستور از استفاده باcoutمتغییر ،n.برد می خروجی به را نکته6-5:دوم قسمت " در همیشهباشد می باال کد صورت به توابع سازی پیاده ،"ای کهپیروی قاعده این از خط ن کند می: 1-.نویسیم می را موجود تابع بازگشتی نوع ابتدا 6-.نویسیم رامی کالس اسم سپس .-دید حوضه عملگر( :: ).دهیم می قرار را 9-آ در وک سازی پیاده است قرار که را نظر مورد تابع خود خر.نویسیم می ،نیم تابع مثال طور به کهinsert()س پیاده قسمت درشود می نوشته صورت بدین کالس ازی:void number::insert() .است کرده رعایت ترتیب به را باال چهارگانه مراحل نیز تابع این که نکته6-2کالس ی همه در تقریبا که دارد وجود ثابت متد چندین ها کالس ی همه در :پیاده است قرار که هایی .باشند می ثابت توابع این ها کالس ی همه در که گفت توان می تقریبا و دارند وجود متدها این ،کنیم سازی این ،ها کالس اغلب سازی پیاده در و داریم سروکار ها آن با ها برنامه اکثر در رایج بطور که متدهایی از بعضی در نیز متدهادارند وجود ما کالساز اند عبارت: 1-ها داده دریافت متداین وظیفه :ها داده دریافت ،متد:قبیل از هایی نام با متدها این اغلب که باشد می input() , insert() , set().شوند می گذاری نام ... وبازگشتی نوع دارای همیشه متدها نوع اینvoidو باشند می .باشند می ) پارامتر بدون و دار پارامتر ( نوع دو دارای 6-باشد می ها داده روی بر محاسبات انجام ،متد این وظیفه : محاسبات انجام به مربوط متد.بطور هبرای مثال ی ریاضی فرمول یک ی محاسبه یا مساحت ی محاسبهبا متدها این اغلب که گیرد می قرار استفاده مورد ... اهایی نام قبیل از:calculate() , convert().شوند می گذاری نام ... وبازگشتی نوع دارای ها برنامه اکثر در متدها نوع این voidها آن بازگشتی نوع خاص مواقع بعضی در فقط و باشند میintیاfloatو باشد می ... یانوع دو دارای .باشند می ) پارامتر بدون و دار پارامتر ( .-دارد برعهده را نمایش صفحه در ها داده نمایش وظیفه متد این : ها داده چاپ متداغل کههایی نام با متدها این ب قبیل از:print() , show() , get().شوند می گذاری نام ... وبازگشتی نوع دارای اغلب متدها نوع اینvoid ها برنامه از بعضی در فقط و باشند می،ها آن بازگشتی نوعintیاfloatمتدها نوع این همیشه و باشد می ... یا .باشند می پارامتر فاقد نکته6-7آن بازگشتی نوع متدی هر اگر :intیاfloatجز به آن بازگشتی نوع ...یعنی یا(void)باشد،در باید داخلmain()با را متد آندستور از استفادهcout:زیر مانند .بنویسیم خروجی در int main() { number ob1; cout << ob1.show(); } نکته6-6آن بازگشتی نوع متدی هر اگر :intیاfloatجز به آن بازگشتی نوع ...یعنی یاvoidمتد داخل در ،باشد بازگشتی دستور از بایدreturnاز استفاده با و کنیم استفادهreturn.دهیم بازگشت را مقدار یک مثال6-6طراحی کالسی :کرده دریافت ورودی از را مستطیلی عرض و طول که کنیدرا آن مساحت و محیط و .دهد نمایش خروجی در و کند محاسبه
16.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 16 )کالس سازی پیاده (بدون اول روش: #include<iostream.h> #include<conio.h> int main() { float lenght, width, area, perime; cout << "enter lenght: "; cin >> lenght; cout << "enter width: "; cin >> width; area = lenght*width; perime = 2 * (lenght + width); cout << "area: " << area << endl; cout << "perime: " << perime; getch(); return 0; } ک سازی پیاده ها کالس از استفاده با را باال برنامه میخواهیم حال اما:شود می طراحی زیر صورت به که نیم #include<iostream.h> #include<conio.h> class rectangle { private: float lenght, width, area, perime; public: void insert(); دارد نام insert() که ها داده دریافت متد void calculate(); دارد نام calculate() که محاسباتی عملیات به مربوط متد void print(); دارد نام print() که ها داده چاپ به مربوط متد }; void rectangle::insert() insert() متد سازی پیاده { cout << "enter lenght: "; cin >> lenght; cout << "enter width: "; cin >> width; } void rectangle::calculate() calculate() سا پیادهمتد زی {
17.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 17 area = lenght*width; perime = 2 * (lenght + width); } void rectangle::print() print() متد سازی پیاده { cout << "area: " << area << endl; cout << "perime: " << perime; } int main() main() تابع { rectangle r1; r1.insert(); r1.calculate(); r1.print(); getch(); return 0; } برنامه این در : کالس توضیح= طول :length= عرض وwidth= محیط وarea= مساحت وperime وجود متدها این ها برنامه اکثر در و باشد می ثابت متد چند دارای کالس هر که کردیم اشاره هم قبل در .باشد می : مانند دارندinsert()یاcalculate()یاprint()باید ابتدا ،شد داده ما به که مثالی هر نویسی برنامه در ابتدا . ... یا متده و متغییرهاورودی از را مستطیل عرض و طول : که است شده گفته مثال این در چون .کرد مشخص را آن ای های نام به متغییر دو باید ابتدا بنابراین ،کند دریافتlengthوwidthمستطیل عرض و طول ی دهنده نشان که آوری وجود به هستندت : که گفتیم هم قبل مطالب در و مقسمت در متغییرها مامیprivateمی قرارباید بنابراین ،گیرند قسمت در را متغییر دو اینprivateعرض و طول : که است شده گفته سوال ادامه در ،این بر عالوه .داد قرار های نام به متغییر دو بنابراین ،کند محاسبه را مستطیلareaوperimeها آن و آوریم می وجود به نیزدر نیز را قسمتprivateمیبه را متغییر دو این نهایت در و ریزیم می ها آن در را مساحت و محیط حاصل و نویسیم قسمت در را ها آن و کردیم مشخص را برنامه در متغییرها تعداد که این از بعد .بریم می خروجیprivateقرار اشاره هم قبال و داریم نیاز متد چند به برنامه این در که بفهمیم باید حال ،دادیمقسمت در باید متدها تمامی که کردیم publicقسمت به را ها آن ،باشیم داشته الزم متد که اندازه هر به بنابراین ،شوند نوشتهpublicدر و کنیم می اضافه در و نویسیم می را هرکدام به مربوط کدهای و تعریف را متدها تک تک " دوم قسمت " همان یا سازی پیاده قسمت آخر ی مرحلهتابع کهmain()استفاده وبا دهیم می قرار مورداستفاده را خود کالس ،باشد می " سوم قسمت " همان یا قسمت متدهای تک تک ،کردیم درست که شی ازpublic.دهیم می قرار دسترسی مورد راشده گفته مثال این در کند دریافت ورودی از را مستطیلی عرض و طول که استها داده دریافت متد یک باید بنابراین ،نام بهinsert() ترتیب به که را مستطیل عرض و طول که کنیم طراحی آن برایlengthوwidthدریافت ورودی از را باشد می نام به محاسبه متد یک به نیاز ما بنابراین ،کند محاسبه را آن مساحت و محیط که است شده گفته ادامه در .کند calculate()متغییر در و محاسبه را محیط ابتدا که داریمareaدر و محاسبه نیز را آن مساحت سپس و ریخته متغییرperimeمتد یک بنابراین ،دهد نمایش خروجی در را مساحت و محیط که است شده گفته نیز پایان در .بریزد نام به ها داده نمایشprint()مساحت و محیط که کنیم می طراحیمتغییرهای داخل در ترتیب به که راareaو perime.داریم نیاز متد سه به ما برنامه این در بنابراین .دهد نمایش خروجی در را هستند
18.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 18 نکته6-4)ها داده چاپ متد و محاسبه متد و دریافت (متد اصلی متد سه بررسی :: 1-همان که )ها داده (دریافت متد اگرinput() , insert() , set()در شود تعریف پارامتر بدون صورت به ،... یا داخل در " دوم قسمت " همان یا سازی پیاده قسمت در صورت ایندستور از متد خودcinوcout.کنیم می استفاده دستور از استفاده با را متغییرها باید متدها نوع این در همیشه وcin.گرفت کلید صفحه ازمتد بازگشتی نوع همیشه صورت به ها داده دریافتvoid.باشد می 6-دستور از استفاده حق دیگر شد مشخص دار پارامتر صورت به متد این اگر اماcinوcoutنداریم متد این در را قسمت متغییرهای تک تک باید وprivateکاراکتر از استفاده با متد این پارامترهای تک تک با را( = )هم مساوی عنوان به .داد قرارقبل برنامه در اگر مثالمتدinsert()تغییر زیر صورت به برنامه ،بود دار پارامتر صورت به .کرد میصورت به ها داده دریافت متد بازگشتی نوع همیشهvoid.باشد می #include<iostream.h> #include<conio.h> class rectangle { private: float lenght, width, area, perime; public: void insert(float a, float b); }; void rectangle::insert(float a, float b) { length=a; پارامترهای با مساوی را private قسمت متغییرهای تک تک ترتیب به width=b; دهیم می قرار insert متد داخل } … … …; … … …; … … …; int main() { rectangle r1; r1.insert(2,3); دهیم می قرار آن داخل را عدد دو بنابراین باشد می پارامتر دو دارای insert متد چون r1.calculate(); r1.print(); getch(); return 0; } توضیها داده دریافت متد چون : کالس حباشد می دار پارامتربنابر ،متد خود داخل در دیگر اینinsert()توان نمی دستور ازcinوcoutدهی نسبت عملیات توان می فقظ کرد استفادهراقبل مثال صورت به که داد انجام ،یاشد داشته پارامتر ما متد که تعداد هر به .باشد میقسمت در نیز تعداد همان بهmain()متد داخل درinsertعدد تابع قبل مثال در مثال .دهیم می قرارinsertبود اعشاری عدد نوع از پارامتر دو دارای،داخل در بنابراینmain() یعنی ،پارامتر تعداد همان به نیز6تابع برای را عددinsert()ارسالباش می صورت بدین که کنیم می:د
19.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 19 r1.insert(2,3); متغییرهای نماینده ترتیب به پارامتر دو این واقع درlengthوwidthقبل روش با روش این فرق فقط و باشند می و طول جا این در که را ها داده ما سپس و شود چاپ نمایش صفحه در پیغام یک که این جای به ،که است این در خود داخل در پارامتر صورت به مقادیر آن دادن قرار با تنها ،کنیم وارد کلید صفحه از استفاده با باشند می عرض متغییرها ،تابع.کنیم می دهی مقدار را خود ی .-همان یا )(محسبه متدcalculate() , convert()شود تعریف پارامتر بدون اگر ... یامحاسبات فقط متد داخل در انجام دهی نسبت عملیات هیچ قسمت این در و دهیم می انجام را نظر موردقبل مثال مانند دهیم نمی.می هم متد این با نوع دارای تواندزگشتیvoidغیر هم وvoidاز غیر آن بازگشتی نوع که آید می پیش کم خیلی اما باشدvoid آن بازگشتی نوع اغلب بنابراین ،باشدvoid.باشد می 9-آخر در هم دهی نسبت عملیات ،محاسبات انجام بر عالوه ،کنیم تعریف دار پارامتر صورت به ،محاسبه متد اگر .دهیم می انجام سر 5-مت)ها داده (چاپ دهمان یاprint() , show() , get()بدون تنها و آید نمی دار پارامتر صورت به گاه هیچ ... یا متد این بازگشتی نوع اگر .باشد می ها داده نمایش جهت فقط و ندارد خاصی دستور و قانون متد این .باشد می پارامتر صورت بهintیاfloatجز به آن بازگشتی نوع یعنی ... یا(void)قسمت در باید ،باشدmain()از استفاده با را آن دستورcout.نوشت خروجی در نکته6-11صورت به آن بازگشتی نوع متدی اگر :intیاfloat...یاجز به آن بازگشتی نوع یعنی(void)در ،باشد د قسمت " همان که توابع سازی پیاده قسمتدستور از استفاده با همیشه باشد می " ومreturnبرگشت را مقدار یک بازگشتی نوع دارای ما متد اگر ولی دهد میvoid.دهد نمی برگشت را مقداری هیچ دیگر بود مثال6-.کالس :rectangleداده جای خود در را ایم گفته االن تا که مطالبی از ای خالصه است آمده زیر در که بن است.کنید دقت آن به ابراین #include<iostream.h> #include<conio.h> #include<stdlib.h> باشد می exit(1) کتابخاتابع به مربوط نه class rectangle باشد می rectangle کالس اسم { private: private قسمت متغییرهای float lenght, width, area, perime; public: public قسمت متدهای void insert(); void calculate(); void print(); void set_lenght(float a); void set_width(float b); float get_lenght(); float get_width(); }; void rectangle::insert() insert() متد سازی پیاده { cout << "enter lenght: ";
20.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 20 cin >> lenght; cout << "enter width: "; cin >> width; } void rectangle::calculate() calculate() متد سازی پیاده { area = lenght*width; perime = 2 * (lenght + width); } void rectangle::print() print() متد سازی پیاده { cout << "area: " << area << endl; cout << "perime: " << perime << endl; } void rectangle::set_lenght(float a) set_lenght(float a) متد سازی پیاده { if (a < 0) { cout << "Erorr!"; exit(1); } lenght = a; } void rectangle::set_width(float b) set_width(float b) متد سازی پیاده { if (b < 0) { cout << "Erorr!"; exit(1); } width = b; } float rectangle::get_lenght() get_lenght() متد سازی پیاده { return lenght; } float rectangle::get_width() get_width() متد سازی پیاده { return width; } int main() main() تابع سازی پیاده
21.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 21 { rectangle r1; آوریم می وجود به را r1 شی r1.insert(); public قسمت های متد تک تک به باید r1 شی از استفاده با r1.calculate(); کنیم پیدا دسترسی ) . ( نقطه کاراکتر از استفاده با r1.print(); r1.set_lenght(6); r1.set_width(2); cout << r1.get_lenght() << endl; و get_lenght() توابع بازگشتی نوع چون cout << r1.get_width(); بنابراین ،باشد می float صورت به get_width() getch(); نویسیم می خروجی در cout دستور از استفاده با را ها آن return 0; } کالس توضیح:.کنیم سازی پیاده ایم خوانده االن تا که را مطالبی از ای خالصه که ایم کرده سعی برنامه این دراین کالس همان ،برنامهrectangleمثالقبلکرده تر پیشرفته کمی را آن مرحله این در فقط باشد میمت چند و ایمد دیگر اضا آن به نیز.ایم کرده فهازتابع مثال این در چونexit(1)که آن ای کتابخانه فایل باید بنابراین کنیم می استفاده #include<stdlib.h>.کنیم اضافه نیز برنامه به را باشد میهمان که قبلی متد سه بر عالوه مثال این درinsert() وcalculate()وprint()همان جز ،هم متد چهار این که اند شده اضافه برنامه به نیز دیگر متد چهار ،باشند می وظیف .کردیم سازی پیاده را ها آن در قبال که است متدهاییهمی زیر صورت به متدها این:باشد 1-متدset_lenght(float a)دریاف (متدهای انواع از یکی متد این ،باشید داشته خاطر به اگر :می )ها داده کننده ت متد همان کار که باشدinsert()ای در اما دهد می انجام رانکه گفتیم هم قبال و است آمده دار پارامتر صورت به جا دستور از دیگر صورت این در ،بیایند دار پارامتر صورت به )ها داده دریافت (متدهای اگرcinوcoutآن داخل در وفقط کنیم نمی استفاده هاقسمت متغییرهای تک تکprivateمساوی کاراکتر از استفاده با را( = )مساوی ، دهیم می قرار تابع خود پارامترهایصورت به متدها این بازگشتی نوع همیشه وvoidباشد میجلوی در معموال . متدsetم ،است قرا که قداریمتد جلوی در اینجا در که مینویسیم را شود فرستاده آن برایsetکلمه ،یlenght متد که باشد می معنی بدین این .است شده نوشتهsetمتغییر است قرارlengthرا باشد می مستطیل طول همان که .کند دریافتمی زیر صورت به که است شده اضافه برنامه به نیز دیگر خط چند ،دهی نسبت برعملیات عالوه اما :باشد if (a < 0) { cout << "Erorr"; exit(1); } " پیغام یک ابتدا ،بود صفر از تر کوچک دریافتی طول اگر که کند می چک فقط کد اینErorr!سپس و کند چاپ " تابع از استفاده باexit(1)و شود خارج برنامه ازهیچ ننویسیم را کد این هم اگر که باشد می خواهی به دل کار یک ب فقط و آید نمی پیش مشکلی،برنامه شدن بهتر رای.ایم کرده اضافه آن به نیز را کد این 6-متدset_width(float b)متد مانند دقیقا نیز متد این :set_lenght(float a)این که تفاوت این با فقط باشد می متغییر همان که مستطیل طول دریافت وظیفه متدwidth.دارد را باشد می .-متدget_lenght()این :ها داده چاپ (متدهای انواع از یکی هم متدمتد همان کار که باشد می )print()انجام را صورت به آن بازگشتی نوع جا این در اما دهد میfloatدار پارامتر صورت به متدها این هم گاه هیچ و باشد می
22.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 22 متد جلوی در معموال .باشند نمیgetمتد جلوی جا این در که نویسم می را دهد بازگشت است قرار که مقداری ،get، ی کلمهlengthمتد که باشد می معنی بدین این .است شده نوشتهgetمتغییر است قرارlengthطول همان که را تابعی بازگشتی نوع اگر که گفتیم هم قبل مطالب در و دهد نمایش خروجی در را باشد می مستطیلصورت بهintیا floatجز به یعنی ... یاvoidدستور از استفاده با را مقدار یک همیشه ،باشدreturnهمیشه و دهد می برگشتاین متد جلوی چون جا این در که دهند می بازگشت را شود می نوشته ها آن جلوی که متغییرهایی ،متدها نوعget ی کلمهlengthبنابراین است شده نوشتهدستور از استفاده با باید متد اینreturnمقدارlength.دهد برگشت را 9-متدget_width()متد مانند دقیقا نیز متد این :get_lenghtچاپ وظیفه متد این که تفاوت این با فقط باشد می متغییرwidthدستور از استفاده با و دارد راreturnمقدار ،width.دهد می برگشت را 6-1ها مخرب و ها سازنده ابتدا در متغییر یک خواهیم می ما که آید می پیش شرایطی اوقات گاهی،برنامه در اگر و باشد ثابت مقدار یک دارای باشد مقدار یک دارای چنان هم ،نکنیم دهی مقدار مربوطه توابع از استفاده با را آنزیادی های استفاده ها سازنده از . برنامه در را ها آن بعدی های مثال در که شود میخود های.دهیم می قرار استفاده مورد نکته6-11تابع در سازنده تشخیص راه :main().باشد می پارامتر و )( پرانتز دارای همیشه سازنده ،که است این باش می دار پرانتز شی یک سازنده واقع درتابع داخل در اگر بنابراین .دmain()بود پرانتز دارای که داشتیم شی یک :زیر صورت به .باشد می سازنده ،شی آن که گیریم می نتیجه داشت وجود پارامتر ،پرانتز داخل در یا Int main() { Rectangle r1(3), r2(4,6); باشند می سازنده r2 و r1 شی … … …; باشد می پارامتری دو سازنده r2 شی و پارامتری تک سازنده r1 شی … … …; } برنامه توضیحتابع داخل در همیشه که گفتیم قبل مطالب در :main()اسم جلوی و نویسیم می را کالس اسم ابتدا ،باشند می پارامتر چندین و پرانتز دارای ما اشیاء که کنیم می مشاهده اینجا در اما .کنیم می ایجاد شی یک کالس بنابرا،قبل نکته به توجه با ینهست سازنده ،اشیاء این که گیریم می نتیجهداشت پارامتر یک اگر و ندیممکه گوییم ی ساز.آخر الی و باشد می پارامتری دو ما سازنده که گوییم می داشتیم پارامتر دو اگر و باشد می پارامتری تک ما نده تابع در ما که اشیایی تمام که کنید توجه نیز نکته این به البتهmain()خود فرض پیش طور به ،آوریم می وجود به می نظر در آن برای پارامتر بدون سازنده یک برنامهدر پارامتر بدون سازنده نوشتن به نیاری دیگر بنابراین .گیرد وخود نیست برنامهC++.دهد می انجام را کار این فرض پیش طور به نکته6-16کنیم اضافه برنامه به نیز مخرب تابع یک باید کردیم استفاده سازنده از خود برنامه در که هنگامی :. که است تابعی مخرب تابعپس وظیفهاست شده ایجاد سازنده متد توسط که دارد را ای حافظه دادنبنابرای .اگر نمتد کالس به را ای سازنده.کنیم اضافه خود کالس به نیز را مخرب متد یک باید حتما ،کردیم اضافه تعداد کردن مشخص برای سازنده متد ازضرای تعداد ،وجهی چند مثلث یک ی ها ضلع تعداد ،بردار یک بعدهایب .شود می استفاده ... و دو درجه معادله یک
23.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 23 نکته6-1.مخرب متد هم و سازنده متد هم :بازگشتی نوع فاقد حتی ،ندارند بازگشتی نوع هیچvoidباشند می همو . ما کالس اسم اگر مثال .باشند می کالس با نام هم ،متدها این دو هرvector،باشدمتدصورت به کالس این سازنده د زیرشود می نوشته " اول قسمت " ر:پارا تک ما سازنده که این فرض (بامتری.)باشد public: vector(float a); }; نکته6-19کاراکتر ،مخرب متد از قبل همیشه که تفاوت این با ولی باشند می کالس با نام هم مخرب و سازنده متد : ( ~ )گیرد می قرارباشد می پارامتر فاقد همیشه و آید نمی دار پارامتر صورت به گاه هیچ مخرب متد و.همیشه می چاپ پیغام یک یا " دوم قسمت " همان یا کالس سازی پیاده قسمت در مخرب متد داخل ،هایی کالس چنین برای که این یا است رفته بین از ما شی مثال که کنیمزیر مثال ماننددا در کدی هیچمی خالی را آن و نویسیم نمی آن خل .گذاریمما کالس اسم اگر مثالvector" اول قسمت " در زیر صورت به کالس این مخرب متد ،باشدمی نوشته :شود public: ~vector(); }; نکته6-15:کرده سازی پیاده االن تا که را هایی کالس و ایم نشده گرها اشاره مبحث وارد ما االن تاساده نسبتا ،ایم ساده بسیار مخرب و سازنده متدهای به مربوط کدهای صورت آن در ،بود گر اشاره بدون ما برنامه اگر .اند بوده باشند می ثابت کدها این ها برنامه ی همه در و باشند میپیاده قسمت در مخرب و سازنده توابع به مربوط کدهای . به " دوم قسمت " همان یا کالس سازی:باشد می زیر صورت سازنده متدکاراکتر از استفاده با را دهی نسبت عملیات فقط متد این داخل در :)( =:زیر صورت به .دهیم می انجام 1-پارامتر بدون سازنده متدکالس برای را پارامتر بدون سازنده متد که نیست الزم ،قبلی شده گفته مطالب طبق : بنویسیمچونخودC++طور بهآشنا آن به مربوط کدهای با که این برای ولی دهد می انجام را کار این فرض پیش زیر مثال در ،شویمقسمت متغییرهای تمام متد این داخل در .ایم کرده استفاده آن ازprivateعدد یک با مساوی را :زیر صورت به مثال .دهیم می قرار خواه دل #include<iostream.h> #include<conio.h> class vector { private: float x, y; public: vector(); }; vector::vector() { x = y = 0; دهیم می قرار اولیه مقدار یک با برابر را private قسمت متغییرهای تمام } است شده داده قرار صفر با برابر جا این در که
24.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 24 6-پارامتری تک سازنده متد:باشد می صورت دو به که دهیم می انجام را دهی نسبت عملیات نیز متد این داخل در: این یامتغییرها تک تک ،پارامتر بدون سازنده مثل که،دهیم می قرار خواه دل عدد یک برابر راتک تک که این یا پا برابر را متغییرها ایندهیم می قرار سازنده متد خود رامترهای.مثالصورت به:زیر #include<iostream.h> #include<conio.h> class vector { private: int x, y; public: vector(float a); }; vector::vector(float a) { x = y = a; دهیم می قرار سازنده پارامتر با برابر را private قسمت متغییرهای تک تک } تابع داخل در اگر ،صورت این درmain()متغییرهای به ،بفرستیم سازنده برای که را مقداری هرxوyنسبت نیز .ایم فرستاده سازنده متد برای که گیرند می را مقداری همان ،نیز متغییرها این و شود می داده .-پارامتری دو سازنده متدمانن دقیقا نیز متد این سازی پیاده نحوه :.باشد می پارامتر تک متد د:زیر صورت به مثال #include<iostream.h> #include<conio.h> class vector { private: int x, y; public: vector(float a, float b); }; vector::vector(float a, float b) { x = a; y = b; } 9-مخرب متدباش می ساده توابع سازی پیاده گرنداشتیم اشاره اگر ،گفتیم قبل مطالب در که طور همان :ند در و داخل ن نمی چیزی آن داخل در و گذاریم می خالی را متد این که این یا کنیم می چاپ پیغام بک یا نیز مخرب متد.ویسیم
25.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 25 نکته6-12تابع در که گفتیم قبال :main()قسمت متدهای تک تک به بایدpublic) . ( نقطه ازکاراکتر استفاده با .کنیم پیدا دسترسیمتد داخل در و گرفتیم یاد را سازنده متد تشخیص راه قبل مطالب در اماmain()به نیازی ،نیز . ( نقطه کاراکتر از استفاده با دسترسیتابع در عنوان هیچ به هم مخرب متد .باشد نمی )main().بیاید تواند نمی مثال6-9نام به کالسی :vectorبربردارها با کار اینیز ها مخرب و ها سازنده از کالس این در که کنید طراحی .باشد شده استفاده #include<iostream.h> #include<conio.h> class vector { private: float x, y; public: vector(); پارامتر بدون سازنده vector(float a); پارامتری تک سازنده vector(float b, float c); پارامتری دو سازنده ~vector(); مخرب متد void insert(); void calculate(); void print(); }; void vector::insert() { ... … … ; } void vector::calculate() { ... … … ; } void vector::print() { ... … … ; } vector::vector() پارامتر بدون سازنده سازی پیاده { x = y = 0; } vector::vector(float a) پارامتری تک سازنده سازی پیاده { x = y = a; }
26.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 26 vector::vector(float b, float c) پارامتری دو سازنده سازی پیاده { x = 28; y = 12; } vector::~vector() مخرب متد سازی پیاده { } int main() main() تابع { vector v0, v1(2), v2(3, 6); v1.insert(); v1.calculate(); v1.print(); getch(); return 0; } کالس توضیح:متد یک همراه به )پارامتری دو و پارامتری تک و پارامتر (بدون سازنده نوع سه کالس این در مخربرامانند دیگری توابع ،این بر عالوه .ایم کرده سازی پیادهinsert()وcalculate()وprint()برنامه در نیز .دارند وجودچونآن برای سازنده نوع چند بنابراین ،کنید استفاده ها سازنده از که است شده گفته سوال صورت در که این برای .ایم کرده استفاده )پارامتر دو و پارامتر تک و پارامتر بدون ( سازنده سه از کالس این در که نویسیم می ها آن سازی پیاده به مربوط های روش و سازنده نوع سه هر باآچندین از ما کالس این در ،شوید شناسازنده نوع .ایم کرده استفادهمخرب متد و سازنده متدهای از کدام هر دستوراتهرکدام به مربوط قواعد واز استفاده با نیز را قبل های نکته(نکته15و12.ایم کرده سازی پیاده ) 6-6گرها اشاره برنامه روش کمی بعد به مرحله این ازپیشرفته های کالس ،گرها اشاره از استفاده با و دهیم می تغییر را خود نویسی چون اما گرفتیم یاد را ... و مخرب و سازنده متدهای با کار روش ،قبل های کالس در .کنیم می سازی پیاده را تری شد خواهند اضافه ما برنامه به نیز گرها اشاره ،بعد به مرحله این از،ر کمی بنابراینمی فرق قبل به نسبت کار وش .کندقسمت در ،متغییرها سایر مانند هم گرها اشاره که کنید دقت نکته این بهprivate.شوند می نوشته نکته6-17به مخرب و سازنده متدهای تمامی ،کل در :5:از اند عبارت که شوند می تقسیم قسمت 1-)گر اشاره (بدون سازنده متد:ایند را متد نوعقبل مثال رهای نکته و مطالب تمامی و دادیم قرار بررسی مورد .نوشتیم را آن 6-اشاره (با سازنده متد)گر:دستورات و قواعد باید بنابراین ،کردیم استفاده گرها اشاره از خود برنامه در اگر به مربوط.کنیم سازی پیاده را متد نوع این .-)گر اشاره (بدون مخرب متداین :نوقبل مثال در را متد عهای نکته و مطالب تمامی و دادیم قرار بررسی مورد
27.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 27 .نوشتیم را آن 9-)گر اشاره (با مخرب متد:دستورات و قواعد باید بنابراین ،کردیم استفاده گرها اشاره از خود برنامه در اگر کنیم سازی پیاده را متد نوع این به مربوط 5-کپی سازنده متد:دیگر های سازنده همانند ،نیز سازنده نوع این،های سازنده مشابه آن سازی پیاده نحوه تقریبا و .باشد می دیگر نکته6-16که کنید دقت خوب نکته این به :سازنده متد یک باید ،کردیم استفاده گر اشاره از خود برنامه در هرگاه : کپیراکال به نیزکنیم اضافه خود سسازی پیاده به نیازی دیگر ،نداشتیم گر اشاره اگر ولیمتدکپ سازندهنمی ی .باشد نکته6-14تغییر نیز مخرب متد و سازنده متد سازی پیاده نحوه ،داشتیم گر اشاره کالس یک در هرگاه :خکرد واهد. از مخرب و سارنده متد سازی پیاده ،که کردیم مشاهده هم قبل های مثال در البتهکند می پیروی خاص چارچوب یک متد سازی پیاده ،داشتیم گر اشاره که هنگامی بنابراین .شود می سازی پیاده صورت یک به ها برنامه تمام در و .شوند می سازی پیاده روش این به ها برنامه تمامی در و کنند می پیروی خاص قاعده یک از نیز ومخرب سازنده نکته6-61برنا در که هنگامی :اشاره داخل در دیگر ما های داده تمام بنابراین ،کردیم استفاده گر اشاره از خود مه دریافت ورودی از را خود های داده که خواستیم هرگاه و گیرند می قرار گرکه این یا نمایش خروجی در را ها آن یا رو را عملیات این باید بنابراین ،دهیم انجام محاسباتی عملیات ها آن روی بروقتی بنابراین .دهیم انجام گرها اشاره ی گرها اشاره روی بر را خود عملیات تمام و داریم سروکار گرها اشاره با دیگر ،داشت وجود گر اشاره برنامه در که .دهیم می انجام نکته6-61:داشتیم گر اشاره که وقتی برای سازنده متد سازی پیاده : #include<iostream.h> #include<conio.h> class vector { private: int n; int نوع از n نام به متغییر یک float a; float نوع از a نام به گر اشاره یک public: vector(int n1); پارامتری تک سازنده متد }: vector::vector(int n1) سازنده متد سازی پیاده { a = new float[n1]; پویا ی آرایه از استفاده :اول مرحله if (!a) دهیم می قرارآن داخل در و if شرط یک :دوم مرحله { cout << "Erorr!"; از استفاده با و کنیم می چاپ "Erorr!" پیغام یک exit(1); ازشویم می خارج برنامه exit(1) دستور } n = n1; مساوی رادهیم می قرار سازنده پارامتر با private سوم مرحله:قسمت داخل متغییر for (int i = 0; i < n; i++) نویسیم می for چهارم مرحلهحلقه یک :
28.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 28 { a[i] = 0; پنجم مرحلهدهیم می قرار صفر مساوی را ها داده تمام : } } ص به سازنده متد همیشه ،داریم گر اشاره که هایی برنامه ی همه درقاعده همین از و باشد می باال ورتپیروی .کند می اول مرحلهاز کار ابتدای در ::باشد می زیر صورت به کار این روش که کنیم می استفاده پویا های آرایه ];سازنده پارامتر[کلیدی ی کلمه گر اشاره بازگشتی نوعnewگر اشاره اسم = a = new float [n1]; دوم مرحله:شرط یک مرحله این درifو دهیم می قرارنویسیم می را کد این آن داخل در:(!a)بدین دستور این یک ،نداشت وجود گر اشاره اگر کند می چک که باشد می معنیپیغام"Erorr!"کند چاپشود خارج برنامه از و سوم مرحلهقسمت داخل متغییر :private.دهیم می قرار سازنده پارامتر با مساوی راn = n1; چهارم مرحلهحلقه یک :forتا صفر از آن داخل در آوریم میn-1.شماریم می را پنجم مرحلهصفر با مساوی را ها داده تمام :داخل در ها داده تمامی ،که گفتیم هم قبل های نکته در .دهیم می قرار .گیرند می قرار گر اشاره 6-.کپی سازنده متد کالس برای نیز کپی سازنده متد یک باید بنابراین کردیم استفاده گرها اشاره از خود برنامه در که هنگامیخود .کنیم طراحیها کالس در کپی سازنده از استفادهکنیم می استفاده گرها اشاره از وقتی چون که باشد می این خاطر به اندازه به که باشد می این پویا های آرایه وظیفه و کنیم استفاده نیز پویا های آرایه از سازنده متد در باید ناچار به پاراموجود به حافظه سازنده متد داخل تربه این و آورند میکپ نیازمند حافظه آوردن وجوداز بیت به بیت گرفتن ی در اما باشد می ها داده تمامیC++را کار این دقیق طور به اما دارد وجود گرفتن کپی نحوه این فرض پیش طور به مت یک نویس برنامه خود باید بنابراین دهد نمی انجام ما برایکند اضافه برنامه به را کپی دکهک نحوهگرف پیپیش تن فرضC++کند سازی پیاده کالس برای جدید گرفتن کپی روش یک و کند لغو راای کهمتدهای همانند نیز متد ن د سازندههم و کند می پیروی خاص قاعده یک از ها برنامه تمامی رها برنامه تمامی در آن چارچوب و ساختار یشه :شود می سازی پیاده زیر صورت به .باشد می یکسان برایک سازنده اعالنپی:نویسیم می صورت بدین را آن کلیدی ی کلمه کالس اسم & کاراکتر شی یک (constکالس اسم ) vector ( const vector & ob ) #include<iostream.h> #include<conio.h> class vector { private:
29.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 29 int n; float *a; public: vector(const vector & ob); کپی سازنده متد }; vector::vector(const vector & ob) کپی سازنده متد سازی پیاده { a = new float[cob.n]; پویا آرایه از استفاده :اول مرحله if (!a) آن داخل در و دهیم می قرار if شرط یک :دوم مرحله { cout << "Erorr!"; دستور از استفاده با و کنیم می چاپ "Erorr!" پیغام یک exit(1); شویم می خارج برنامه از exit(1) } n = cob.n; کپی سازنده داخل پارامتر با مساوی رادهی می قرارم private داخل متغییر :سوم مرحله for (int i = 0; i < ob.n; i++) نویسیم می for ی حلقه یک :چهارم مرحله { a[i] = cob.a[i]; دهیم می قرار کپی سازنده داخل پارامتر مساوی را ها داده تمام :پنجم مرحله } } مرحلهاول:باشد می زیر صورت به کار این روش که کنیم می استفاده پویا های آرایه از کار ابتدای در : ]متغییرداخلprivateکپی سازنده داخل پارامتر .[گر اشاره بازگشتی نوعکلیدی ی کلمهnew=گر اشاره اسم a = new float [ob.n]; باید ،نوشتیم را کپی سازنده متد داخل پارامتر که وقت هر ،کپی سازنده متد سازی پیاده در که کنید دقت نکته این به قسمت متغییر سپس و ) . ( نقطه کاراکتر آن از بعدprivate.باال دستور مانند .بدهیم قرار را دوم مرحله:دباشد می قبلی سازنده مانند قیقا سوم مرحلهداخل متغییر :privateالبته .دهیم می قرار کپی سازنده داخل پارامتر با مساوی راخوب نکته این به که است این وآن دارد معمولی سازنده با جزعی تفاوت یک کپی سازنده که کنید دقتدر همیشه کپی سازنده داخل در پا از بعد سوم مرحلهکاراکتر از استفاده با دوباره ،رمترداخل متغییر اسم ) . ( نقطهprivate:زیر صورت آید.به می :معمولی سازنده برایn=n1; :کپی سازنده برایn=cob.n; چهارم مرحله:دسازنده مانند قیقاباشد می قبلی پنجم مرحلهکه کنید دقت خوب نکته این به البته .دهیم می قرار سازنده داخل پارامتر با مساوی را ها داده تمام : چهارم مرحله در همیشه کپی سازنده داخل در که است این وآن دارد معمولی سازنده با جزعی تفاوت یک کپی سازنده گ اشاره از بعداستفاد با دوباره ،رهگر اشاره خود ) . ( نقطه عالمت از:زیر صورت آید.به می :معمولی سازنده برایn=n1; :کپی سازنده برایa[i]=ob.a[i]; نکته6-66:داشتیم گر اشاره که وقتی برای مخرب متد سازی پیاده : #include<iostream.h>
30.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 30 #include<conio.h> class vector { private: int n; n نام به متغییر یک float *a; float نوع از a نام به گر اشاره یک public: ~vector(); مخرب متد }: vector::~vector() مخرب متد سازی پیاده { delete[]a; delete دستور از استفاده با a گر اشاره بردن بین از :اول مرحله } اول مرحله:گر اشاره بردن بین ازaدستور از استفاده باdeleteمی سازی پیاده را آن زیر صورت به که .:کنیم ;گر اشاره اسم[]کلمهکلیدی یdelete delete [] a; نکته6-6.(دریافت متدهای داخل در ،داشتیم گر اشاره وقتی همیشه :ی حلقه از )ها داده نمایش و ها دادهfor ی حلقه داخل در بنابراین ،باشد می متفاوت ما های داده تعداد چون که باشد می این خاطر به کار این .کنیم می استفاده for.دهیم می نمایش یا ،دریافت یا را ها داده و کنیم می شمارش ترتیب به را اندیس آخرین تا صفر از مثال6-5ک :فضای در بردارها با کار برای السیnاز استفاده با بردار این بعدهای تعداد که کنید سازی پیاده بعدی .شود کنترل سازنده متد یک)گرها اشاره از استفاده (با #include<iostream.h> #include<conio.h> #include<stdlib.h> class vector { private: int n; باشد می ما بردار بعدهای تعداد همان n متغییر float *a; float نوع از a نام به گر اشاره یک public: vector(const vector & ob); س متدکپی ازنده vector(int n1); پارامتری تک سازنده متد ~vector(); مخرب متد void set(float x, int index); ها داده دریافت متد void show(); ها داده نمایش متد }; vector::vector(const vector & ob) متد سازی پیادهکپی سازنده
31.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 31 { a = new float[ob.n]; if (!a) { cout << "Erorr!"; exit(1); } n = ob.n; for (int i = 0; i < ob.n; i++) { a[i] = ob.a[i]; } } vector::vector(int n1) سازی پیادهسازند متده { a = new float[n1]; if (!a) { cout << "Erorr!"; exit(1); } n = n1; for (int i = 0; i < n; i++) { a[i] = 0; } } vector::~vector() مخرب متد سازی پیاده { delete[]a; } void vector::show() show() متد سازی پیاده { for (int i = 0; i < n; i++) { cout << a[i] << " " << endl; } } void vector::set(float x, int index) set متد سازی پیاده { if (index < 0 || index >= n)
32.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 32 { cout << "Erorr!"; exit(1); } a[index] = x; } int main() main() تابع { vector v1(3); باشد می بردار یک بعدهای تعداد دهنده نشان ،آن پارامتر که پارامتری تک سازنده یک v1.set(3, 0); set متد از استفاده با 0 شماره اندیس در 3 مقدار دادن قرار v1.set(8, 1); set متد از استفاده با 1 شماره اندیس در 8 مقدار دادن قرار v1.set(5, 2); set متد از استفاده با 2 شماره اندیس در 5 مقدار دادن قرار v1.show(); show() متد از استفاده با ها داده دادن نشان getch(); return 0; }; کالس توضیح:همان تقریبا کالس اینقبل مثال کالسد که تفاوت این با باشد میاین راشاره از جااستف گرهااده .ایم کردهدر چوناشاره به مربوط های مخرب و ها سازنده باید بنابراین ،ایم کرده استفاده گرها اشاره از کالس این کنیم سازی پیاده را گرهاکنیم سازی پیاده نیز کپی سازنده متد یک باید چنین وهمها آن از هرکدام به مربوط قواعد . برر مورد قبل های نکته در را،دستورها و قواعد همان طبق و دادیم قرار سی.کنیم می سازی پیاده را کدها :از اند عبارت که دارند وجود کالس در هم دیگر متد چندین ،مخرب و سازنده متدهای بر عالوه متدset(float x, int index)و فقط و باشد می ها داده دریافت متدهای جز متد این :ها داده دریافت ظیفهبرعهده را پارام دارای متد این چون ،قبل مطالب دارد.طبقمتد داخل در بنابراین ،باشد می تردستور از ،cinوcoutاستفاده نکنیم میقسمت در بلکه کنیم نمی وارد کلید صفحه از استفاده با را ها داده که این یعنی ،main()این برای را ها داده فرستیم می متدمتد .setص بدین:کند می عمل ورت که اول پارامتر .باشد می پارامتر دو دارای متد اینxکه دوم پارامتر و دارد را اعداد گرفتن وظیفه دادر نامindex متغییرهای دارد نامxمتغییر بنابراین .دهد می جای خود در راindexو دارد خود در را آرایه یک های اندیس تعداد متغییر از استفاده باx،سازنده پارمتر که است شده گفته سوال صورت در .دهیم می مقدار متغییرها این تک تک به قسمت در وقتی بنابراین ،باشد می بردار این بعدهای تعدادmain()عدد ،.معنی بدین فرستیم می سازنده این برای را ما بردار که باشد می.اندیس از آن بعدهای وتعداد و باشد می بعدی1تاn-1اندیس دارای یعنی1و1و6می پارامتر از استفاده با بنابراین ،باشدxپارامتر در را ها داده این ،باشند می ها داده همان کهindexشماره همان که .دهیم می قرار باشد می ها اندیس:باشد می زیر صورت به برنامه این شکل اندیس شماره مقدار .1 61 56 متدshow()،داشتیم گر اشاره اگر که گفتیم هم قبل در و باشد می اطالعات و ها داده نمایش متدهای جز متد این : قسمت در هم و گیرند می قرار گر اشاره داخل در ما های داده تمامcinقسم در هم وتcoutانجام برای هم و
33.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 33 ابتدا ،قبلی های نکته طبق اطالعات نمایش برای هم متد این در بنابراین .کنیم می استفاده گرها اشاره از ،محاسبات ی حلقه یکforدستور از استفاده با را گرها اشاره تمام سپس ،نویسیم میcout.دهیم می نشان خروجی در مثال6-2" با کار برای کالسی :داشته سازنده یک که کنید طراحی طوری را کالس این .بگیرید نظر در " زمان فرض پیش مقدار که باشد11:11:11)باشند صفر مقدار دارای کار ابتدای در ثانیه هم و دقیقه هم و ساعت هم (یعنی ساعت پارامتر که کنید طراحی طوری را کالس سازنده .بگیرد نظر در آغازین زمان برای رااعداد بین6.-1و اعداد بین دقیقه پارامتر54-1پارامتر وثانیهاعداد بین54-1اگرهرک صورت این غیر در ،باشدسه این از دام مقدا ،بودند مقادیر این از خارج پارامترچاپ خروجی در را زمان نهایت در و شود گرفته نظر در آن برای صفر ر .کند #include<iostream.h> #include<conio.h> class time { private: int hour, minute, second; public: time(int a, int b, int c); ثانیه و دقیقه و ساعت برای پارامتری سه سازنده void print(); ها داده نمایش متد }; time::time(int a, int b, int c) سازنده متد سازی پیاده { if (a<0 || a>23) { a = 0; } if (b<0 || b>59) { b = 0; } if (c<0 || c>59) { c = 0; } hour = a; minute = b; second = c; a = 0; b = 0; c = 0; } void time::print() print متد سازی پیاده
34.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 34 { cout << hour << ":" << minute << ":" << second; } int main() main() تابع { time t1(21, 43, 28); t1.print(); getch(); return 0; } کالس توضیحباشد پارامتر سه دارای ما سازنده متد باید بنابراین کنیم کار زمان با داریم قصد ما کالس این در چون : ساعت ی کننده مشخص اول پارامتر که(houre)دقیقه ی کننده مشخص دوم پارامتر و(minute)سوم وپارامتر ثانیه ی کننده مشخص(second)به نیز را ها داده دریافت متد که است نگفته سوال صورت در که کنید دقت .باشد متد یک و پارامترها به دادن مقدار برای سازنده متد یک فقط هم ما بنابراین ،کنید اضافه کالسprint()نمایش برای سازی پیاده کالس این برای ها داده.کنیم میکنید کنترل را اعداد محدوده که است شده گفته سوال صورت در چون دستور سه از بنابراینifکنترل سومی و دقیقه ی کننده کنترل دومی و ساعت ی کننده کنترل اولی که است شده استفاده مح از خارج دریافتی اعداد اگر که شود می چک ها این سه هر در .باشد می ثانیه ی کنندهرا آن ،بود نظر مورد دوده قسمت متغییرهای تک تک ،سازنده متد داخل در که گفتیم هم قبال .کند تبدیل صفر بهprivateاز استفاده با را کاراکتر( = )مساودهیم می قرار سازنده خود پارامترهای یندادن مقدار صورت در که است شده گفته این بر عالوه . پ پارامتر،مقدار سه این بهنظر در پارامتر سه هر برای را صفر فرض یشد را دستورات این ی همه که بگیریدر .ایم کرده سازی پیاده سازنده متد داخل مثال6-7:کنید طراحی ها ای جمله چند با کار برای کالسیطر کالس برای ای سازنده .احیکه کنیدچند ی درجه ای جملهبدی ای جمله چند یک .کند مشخص رانشود می نوشته صورت:+18x+242+16x320x #include<iostream.h> #include<conio.h> class polynomial { int *p; دارد می نگه خود در را ای جمله چند ضرایب که p گر اشاره int d; باشد می ای جمله چند ی درجه ی دهنده نشان که d متغییر public: polynomial(const polynomial & ob); کپی سازنده متد polynomial(int d1); سازنده متد ~polynomial(); مخرب متد void insert(int i, int a); ها داده دریافت متد void print(); ها داده نمایش متد }; polynomial::polynomial(const polynomial & ob) سازی پیادهکپی سازنده متد { p = new int[d + 1];
35.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 35 if (!p) { cout >> "Erorr!"; exit(1); } d = ob.d; for (int i = 0; i <= d; i++) { p[i] = ob.p[i]; } } polynomial::polynomial(int d1) سازنده متد سازی پیاده { p = new int[d1 + 1]; if (!p) { cout << "Error"; exit(1); } d = d1; for (int i = 0; i <= d; i++) p[i] = 0; } polynomial::~polynomial() مخرب متد سازی پیاده { delete[]p; } void polynomial::insert(int i, int a) insert متد سازی پیاده { if (i<0 || i>d) { cout << "out of index"; exit(1); } p[i] = a; } void polynomial::print() print() متد سازی پیاده { for (int i = d; i>0; i--) { if (p[i] != 0)
36.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 36 { cout << p[i] << "x^" << i; } } cout << p[0]; } int main() main() تابع { polynomial ob1(3); باشد می درجه 3+1 چند ایندارای حداکثر ای جمله ob1.insert(0, 2); 0 توان به x ضریب برای 2 مقدار دادن قرار ob1.insert(1, 8); 1 توان به x ضریب برای 8 مقدار دادن قرار ob1.insert(2, 5); 2 بتوان ه x ضریب برای 5 مقدار دادن قرار ob1.insert(3, 12); 3 توان به x ضریب برای 12 مقدار دادن قرار ob1.print(); getch(); return 0; } کالس توضیح:نام به گر اشاره یک ابتدا درpچند ضرایب کهنام به متغییر یک و دارد می نگه خود در را ای جمله dقسمت در را باشد می ای چندجمله ی درجه کهprivateدهیم می قرارای چندجمله ی درجه که سازنده یک سپس (پارامتر باشد می پارامتر دو دارای که کننده دریافت متد یک بعد مرحله در .کنیم می سازی پیاده کند می کنترل را اولمی اضافه خود کالس به را )باشد می ضرایب مقدار :دوم پارامتر و ای جمله چند ضرایب گرفتن قرار محل : متد یک از نیز آخر در و کنیمprint()خود برنامه در چون که کنید دقت .کنیم می استفاده ای چندجمله نمایش برای سازند متد یک باید بنابراین ،کنیم می استفاده گر اشاره از.کنیم اضافه خود کالس به نیز کپی های بر عالوهیک باید ن .برگرداند سیستم به دوباره را شده ایجاد ی حافظه تا بنویسیم هم مخرب متدمی نوشته صورت بدین ای جمله چند یک :شود+18x+242+16x320x،ای جمله چند ی درجه باالترین ،بینید می که طور همان.در تعداد اما .باشد میجه در که است همین خاطر به ،باشد می ای جمله چند ی درجه باالترین از تر بیش واحد یک همیشه ،ای جمله چند های مقدار سازنده متد داخلdعدد ی عالوه به را باشد می ای جمله چند ی درجه همان که1.ایم کرده مثال6-6کنید سازی پیاده ها کالس از استفاده با را ای پشته :یک .از است عبارت پشته:که آرایه یکد تعدادیاده )گر اشاره (بدون .دهد می نمایش را ها آن اول به آخر از خروجی در و دارد می نگه خود در را #include<iostream.h> #include<conio.h> #include<stdlib.h> class stackint { int stack[100]; دارد می نگه خود در را صحیح عدد آ یکرایه111که عضوی111 int tos; باشد می پشته باالی خالی عنصر اندیس tos متغییر public: stackint(); سازنده متد
37.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 37 void push(int x); دهد می قرار پشته در را x مقدار و باشد می دار پارامتر که ها داده دریافت متد int pop(); ها داده چاپ متد }; stackint::stackint() سازنده متد سازی پیاده { tos = 0; } void stackint::push(int x) دارد نام push که ها داده دریافت متد سازی پیاده { if (tos >= 100) { cout << "stack is full"; exit(1); } stack[tos] = x; tos++; } int stackint::pop() دارد نام pop که ها داده نمایش متد سازی پیاده { if (tos <= 0) { cout << "stack is empty"; exit(1); } tos--; return stack[tos]; } int main() { stackint s1, s2; for (int i = 0; i <= 10; i++) { s1.push(i); } for (int j = 0; j <= 10; j++) { cout << s1.pop() << " "; } cin.get(); cin.get(); return 0;
38.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 38 } کالس توضیح.شود می زیادی های استفاده ها آن از کامپیوتر علم در که هستند هایی داده ساختمان از یکی ها پشته : تعدادی که باشد می ای آرایه یک پشتهمی نمایش را ها آن اول به آخر از خروجی در و دارد می نگه خود در را داده آرایه یک به نیاز مقادیر این ذخیره برای بنابراین .دهدنام بهstackنگه خود رادر ها داده این ی همه که داریم با برابر هم آرایه این عنصرهای تعداد .کند داری111که این یعنی ایم داده قرارتا ما پشته111در تواند می را عدد .کند داری نگه خودمتغییرtosآیا که کنیم می چک متغییر این از استفاده با ما و باشد می آرایه باالی خالی عنصر .نه یا است پر ما پشتهمقدار که کنیم می استفاده کالس این برای سازنده یک از ابتدا درtosصفر برابر ابتدا در را قرار.است نداده جای خود در را مقداری هیچ و است خالی ما پشته ابتدا در که باشد می معنی بدین این و دهد میمتد pushنام به پارامتر یک دارای که باشد می ها داده دریافت متد یک همxباشد میاست مقداری همان پارامتر این و باشید داشته خاطر به اگر .دهد قرار پشته در باید کهنوع دارای همیشه ها داده دریافت متد که گفتیم هم قبل مطالب در بازگشتیvoidآ در و .باشد مینام به ها داده چاپ متد یک از هم خرpop.کنیم می استفاده ا داده نمایش برای که کنید دقت نکته این بهآرایه این طول و کنیم می استفاده ها آرایه از چون111بنا ،باشد می عنصرقسمت در براین main()متد ز استفاده باpushحلقه یک از ما مثال این در مثال .کنیم پشته وارد را مقدار یک از بیش باید ،for ازعدد که ایم کرده استفاده0تا10متد از استفاده با و کند می شمارش راpushتک دارد قرار حلقه این داخل در که اعداد (یعنی را مقادیر این تک1تا11.دهد می قرار پشته داخل در را )حلقه یک از هم اعداد این نمایش برای وfor متد از استفاده با را ها داده این تک تک و کنیم می استفادهpop.دهیم می نمایش خروجی در متد که کنید دقتpushدستور از استفاده با راcoutمتد ولی ایم نداده قرار خروجی درpopدستور از استفاده با را coutآن بازگشتی نوع همیشه ها داده دریافت متد چون که است این کار این دلیل .ایم نوشته خروجی درvoidمی بازگشتی نوع صورت به کالس این در ها داده چاپ متد اما شود نوشته خروجی در نباید و باشدintبنابر ،است آمده استف با را متد این باید ایناز ادهدستورcout.بنویسیم خروجی درمتد داخل درpushکه است شده نوشته کدهایی همان که پشته باالی خالی اندیس اگر که کند می چک ابتدا در :شود می بیان صورت بدینtosاز بزرگتر ،باشد می جا این در که ،ما پشته طول111این بر مبتی پیغام یک باشد ،است شده گرفته نظر درکند چاپ را است پر پشته که دستور از استفاده با وexit(1)دریافتی مقدار ،نبود پر پشته اگر اما .شود خارج برنامه ازxمورد آرایه داخل در را متغییر به واحد یک کار این برای که برود بعد شماره خانه به و دهد قرار نظرtos.کنیم می اضافه متد به مربوط کدهایpopب نیزآرایه باالی خالی اندیس اگر که کند می چک آید می ابتدا :شوند می بیان صورت دین همان یاtosپ یک ،بود صفر عدد با مساویا خالی پشته که این بر مبتنی یغامچاپ را ستدستو از استفاده با و کندر exit(1)ترتیب به ،نبود خالی پشته اگر اما .شود خارج برنامه ازازخانهیباالو بیاید پشته پایین سمت به پشته ی دستور از کار این برای دهد نمایش را ها داده این تک تکtos--اول سمت به پشته آخر از که ایم کرده استفاده متد بازگشتی نوع چون و کند حرکتpopنوع ازintآرایه در که را ها داده تک تک بنابراین ،باشد میstack است با اند شده ذخیرهدستور از فادهreturn.دهد می برگشت مثال6-4مثال پشته :قبلباشد هم گر اشاره دارای که کنید سازی پیاده طوری را،پویا های آرایه از استفاده با و مثال ثابت مقدار یک دارای که نباشد الزم دیگر و کنیم تعیین خواهیم می که اندازه هر را پشته های خانه تعداد111 بل باشد.کنیم تعیین خواهیم می خودمان که مقدار هر به را پشته طول که #include<iostream.h> #include<conio.h> #include<stdlib.h> class stackint { float *p; int size;
39.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 39 int tos; public: stackint(int a); ~stackint(); void push(int x); int pop(); }; stackint::stackint(int a) { p = new float[a]; if (!p) { cout << "Erorr!"; exit(1); } size = a; } Stackint::~stackint() { delete[]p; } void stackint::push(int x) { if (tos >= size) { cout << "dtack is full"; exit(1); } p[tos] = x; tos++; } int stackint::pop() { if (tos <= 0) { cout << "stack is empty"; exit(1); } tos--; return p[tos]; }
40.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 40 int main() { stackint s1(20); for (int i = 0; i <= 10; i++) { s1.push(i); } for (int j = 0; j <= 10; j++) { cout << s1.pop() << " "; } getch(); return 0; } کالس توضیح:کالس اینقبل مثال مانند تقریباو ایم کرده استفاده گرها اشاره از جا این در که تفاوت این با باشد می دیگر ،داریم گر اشاره چون جا این در .ایم کرده سازی پیاده تر پیشرفته را خود برنامه کمیطول که نیست نیازی کند ذخیره خود در را ما های داده که کیم می استفاده گر اشاره یک از بلکه کنیم مشخص ابتدا در را خود آرایهدر و نام به جدید متغییر یک از براین عالوه .دهد نمایش را ها آن خروجیsizeنیز کند می کنترل را آرایه محدوده که کنید دقت .ایم کرده استفادهقسمت در ما کهmain()مقدار61معنی بدین این ،ایم فرستاده سازنده برای راباشدکه می سقف تا حداکثر ما پشته61حلقه داخل در اگر و دارد نگه خود در تواند می را عددforتر بیش را خود پایانی عدد از61اس با نیز دیگر های متد تمامی .دهد می خطا پیغام یک برنامه نوشتیمم از تفادهایم کرده سازی پیاده قبلی طالب. تابع همان که " کالس سوم قسمت " و کند می تغییر شرایط اوقات گاهیmain()می و دهند می ما به را باشد می به توجه با گویندmain()کنید سازی پیاده را الزم های متدها شده دادهما و دهند می ما به را " سوم قسمت " یعنی . " باید.کنیم سازی پیاده را " دوم قسمت " و " اول قسمت:زیر مثال مانند مثال6-11:به توجه باmain().کنید سازی پیاده را الزم متدهای شده داده)کالسdataنظر در تاریخ با کار برای می تبدیل میالدی به را آن معادل و کند می دریافت شمسی صورت به ماه و سال براساس را تاریخ و است شده گرفته کند). #include<iostream.h> #include<conio.h> class data { private: int year, month; public: … ... ... ; … ... ... ; }; int main() {
41.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 41 data d1; d1.insert(1394, 11); d1.calculate(); d1.show(); cin.get(); cin.get(); } :شود می سازی پیاده زیر صورت به کالس این #include<iostream.h> #include<conio.h> class data { private: int year, month; public: void insert(int year, int month); void calculate(); void show(); }; void data::insert(int year1, int month1) { year = year1; month = month1; } void data::calculate() { if (month <= 10) { year += 621; month += 2; } else if (month > 10) { year += 622; month -= 10; } } void data::show() {
42.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 42 cout << year << "/" << month; } int main() { data d1; d1.insert(1394, 11); d1.calculate(); d1.show(); getch(); return 0; } کالس توضیح:س ای داده نوع دو با که است شده گفته هم سوال صورت در و باشد می تاریخ به مربوط باال کالسال قسمت به همه از اول .کنیم می کار ماه وmain()متد که دارد وجود متد سه قسمت این در ،کنیم می نگاهinsert() به مربوط دومی پارامتر و سال به مربوط اولی پارامتر که است پارامتر دو دارای و باشد می کننده دریافت متد همان نام به کننده محاسبه متد یک و باشد می ماهcalculateشمسی از تاریخ تبدیل عملیات که داردمی انجام را میالدی به آ در و دهدبرد می خروجی به را یافته تغییر تاریخ که دارد داده چاپ متد یک هم خر. متد چون ،قبل مطالب به توجه باinsertدستور از بنابراین ،باشد می دار پارامترcinوcoutمتد این داخل در قسمت متغییرهای تک تک فقط و کنیم نمی استفادهprivate.دهیم می قرار آن های پارامتر با مساوی را قسمت در چون ،کنید دقت خوب هم نکته این بهprivateمخرب متد به نه ما برنامه بنابراین است نیاورده گر اشاره اش چون و .دارد نیاز کپی سازنده متد به نه ودرقسمت هم ما یاءmain()می نتیجه بنابراین ،باشند می پارامتر فاقد .نیست نیازی هم سازنده متد به که گیریم مثال6-11:به توجه باmain()(کالس .کنید سازی پیاده را الزم متدهای شده دادهstudentنمرات با کار برای آموزان دانش نمره و اسم و است شده طراحی آموزان دانشهم و دهد می نشان خروجی در را ها آن هم و دریافت را .کند می محاسبه را آموزان دانش کل نمرات میانگین #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<string> class student { private: string *p; ای رشته نوع از p گر اشاره string str; کند می ذخیره را آموزان دانش نام که ای رشته float score[100]; کند می ذخیره را آموزان دانش ی نمره که آرایه یک float avrage; کند می ذخیره را آموزان دانش کل معدل که متغییر یک int x; باشد می آموزان دانش تعداد ی دهنده نشان که متغییری public: … … …; … … …;
43.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 43 }; int main() { student s1(5); s1.input(); s1.calculate(); s1.show(); getch(); return 0; } :شود می سازی پیاده زیر صورت به کالس این #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<string> class student { private: string *p; ای رشته نوع از p گر اشاره string str; کند می ذخیره را آموزان دانش نام که ای رشته float score[100]; کن می ذخیره را آموزان دانش ی نمره که آرایه یکد float avrage; کند می ذخیره را آموزان دانش کل معدل که متغییر یک int x; باشد می آموزان دانش تعداد ی دهنده نشان که متغییری public: student(int a); پارامتری تک سازنده متد ~student(); مخرب متد student(const student & ob); کپی سازنده متد void input(); ها داده دریافت متد void calculate(); محاسبه متد void show(); ها داده نمایش متد }; student::student(const student &ob) کپی سازنده متد سازی پیاده { p = new string[ob.x]; if (!p) { cout << "Erorr!"; exit(1); } x = ob.x;
44.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 44 for (int i = 0; i < ob.x; i++) { p[i] = ob.p[i]; } } student::student(int a) سازنده متد سازی پیاده { p = new string[a]; if (!p) { cout << "Erorr!"; exit(1); } x = a; } student::~student() مخرب متد سازی پیاده { delete[]p; } void student::input() inputمتد سازی پیاده { for (int i = 0; i < x; i++) { cout << "enter name student " << i + 1 << ": "; cin >> p[i]; cout << "enter score student " << i + 1 << ": "; cin >> score[i]; } } void student::calculate() calculate متد سازی پیاده { float avg = 0, avrage1; int count = 0; for (int i = 0; i < x; i++) { avg += score[i]; count += 1; } avrage1 = avg / count; avrage = avrage1; }
45.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 45 void student::show() show() متد سازی پیاده { cout << endl; for (int i = 0; i < x; i++) { cout << "student " << i+1 << ": " << p[i] << ": " << score[i] << endl; } cout << endl; cout << "avrage student: " << avrage; } int main() { student s1(5); s1.input(); s1.calculate(); s1.show(); getch(); return 0; } کالس توضیح:همراه به آموزان دانش از تعدادی اسامی کالس اینخروجی در و کند می دریافت را ها آن نمره آن نمره همرا به آموزان دانش اسامیبر عالوه .شود می داده نمایش هااین،نیز را آموزان دانش کل نمرات میانگین قبال .کند می محاسبهها سازنده از که گفتیم هممی استفاده بردار یک بعدهای تعداد یا افراد تعداد کردن مشخص برای شوهم جا این در .داشاره در هم را آموزان دانش اسامی و کنیم می استفاده آموزان دانش تعداد کردن مشخص برای گرpی آرایه .کنیم می ذخیرهscoreمتغییر و میدهد جای خود در را آموزان دانش تک تک نمرات نیزaverage م یک از .کند می ذخیره خود در را کالس کل نمرات میانگین نیزنام به کمکی تغییرxدانش تعداد ی دهنده نشان که .کنیم می استفاده نیز باشد می آموزانمتغییر ازavgمتغییر از و آموزان دانش نمرات ی همه جمع برایcountنیز .کنیم می استفده آموزان دانش تعداد شمارش برایسازند متد باید کنیم می استفاده گرها اشاره از چون که کنید دقته قسمت در .کنیم اضافه کالس به نیز مخرب متد و کپیmain()عدد با برابر سازنده پارامتر مقدار ،5این ،باشد می آموزان دانش تعداد که باشد می معنی بدین5.باشند می نفر مثال6-16:نام به کالسیcalculator.باشد داشته را معمولی حساب ماشین یک های قابلیت که کنید طراحی #include<iostream.h> #include<conio.h> #include<math.h> #include<string> class calculator { private: string str; char ch;
46.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 46 float a, b; float n; public: void math1(); void math2(); }; void calculator::math1() { cin >> a >> ch >> b; if (ch == '+') cout << a + b; else if (ch == '-') cout << a - b; else if (ch == '*') cout << a*b; else if (ch == '/') cout << a / b; } void calculator::math2() { cin >> str >> n; if (str == "sin") { cout << sin(n); } else if (str == "cos") { cout << cos(n); } else if (str == "tan") { cout << tan(n); } else if (str == "sqrt") { cout << sqrt(n); } else if (str == "log")
47.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 47 { cout << log(n); } else if (str == "asin") { cout << asin(n); } else if (str == "acos") { cout << acos(n); } else if (str == "atan") { cout << atan(n); } else if (str == "sinh") { cout << sinh(n); } else if (str == "cosh") { cout << cosh(n); } else if (str == "tanh") { cout << tanh(n); } } int main() { calculator ob1; ob1.math1(); cout << endl; ob1.math2(); getch(); return 0; } :کالس توضیحدرC++نام به ریاضی ی کتابخانه یکmathمانند زیادی ریاضی توابع که دارد وجودsinوcosو logکتابخانه فایل باید ریاضی توابع این از استفاده برای .دارد وجود آن در ... وmathصورت به را #include<math.h>مقدار دریافت برای مثال .کرد اضافه برنامه به:sin 90از اولی که داریم نیاز متغییر دو به ما
48.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 48 عبارت مثال که ای رشته نوعsinیاtanاعشاری نوع یک از باید دومی متغییر و کند دریافت ورودی از را ... یا نام به متد یک قالب در را عملیات این ما بنابراین .کند می دریافت را مقدار یک که باشدmath2()کرده سازی پیاده ااصلی عملیات چهار ،براین عالوه .یمو + (–نام به متد یک از استفاده با نیز ) / و * وmath1ایم کرده طراحی روی بر را مناسب عملیات ورودی کاراکتر از استفاده با و کند می دریافت ورودی از را کاراکتر یک و عدد دو که ورودی کاراکتر اگر مثال .دهد می انجام اعداد'+'.آخر الی و کند جمع هم با را عدد دو ،بودمتد دو که کنید دقت math1()وmath2()کرده گذاری نام چنین این را ها آن جا این در ما که باشند می ها داده دریافت متدهای همان دستور از ها آن داخل در بنابراین ،باشند می پارامتر بدون متد دو این هر که کنید دقت .ایمcinوcoutکرده استفاده .کنیم می وارد کلید صفحه از استفاده با را ها داده که این یعنی ،ایم سوم فصلعملگرها سربارگزاری : های بخش ترین قدرتمند از یکی عملگرها سربارگزاریC++عملیات توان می روش این از استفاده با که باشد می را محاسباتیقسمت درmain()روی براشیاءداد انجام... یا ضرب یا تفریق یا جمع عملیات مانند .اگر حتی یا و دستور از استفاده با را اشیاءcinدستور از استفاده با یا دریافت ورودی ازcoutنمایش خروجی درداداز باید ، .کرد استفاده عملگرها سربارگزاریداخل در اگرmain()شوی می مواجه خطا با بنویسیم کدی چنیناجرا برنامه و م شود نمی. #include<iostream.h> #include<conio.h> class vector { 666 … …; … … …; }; int main() { vector v1, v2, v3; v3 = v1 + v2; cout << v3; getch(); return 0; } کالس توضیحقسمت در :main()،باال برنامه.های نام به شیv1وv2وv3شی جمع حاصل که دارند وجودv1 شی وv2شی درv3شی هم سر آخر در و شود می ریختهv3است شده داده نشان خروجی دراگر .را باال برنامه اند شده جمع هم با شی دو قسمت دراین چون ،شویم می مواجه خطا با کنیم اجرادستور از استفاده با نیز نهایی شی و cout.است شده داده نمایش خروجی درانجام اشیاء روی بر محاسباتی عملیات گاه هر که گفتیم قبلی مطالب طبق
49.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 49 دست از استفاده با را ها آن یا دادیمورcinدستور از استفاده با یا گرفتیم ورودی ازcout،دادیم نمایش خروجی در .کنیم استفاده عملگرها سربارگزاری روش از باید نکته.-1با شود می انجام اشیاء روی بر که عملیاتی از استفاده با :یدهمان دقیقامثال کرد سربارگزاری را عملگر باید بود شده نوشته کدی چنین اگر:کرد گزاری سربار را عملگرها این تک تک class vector { ... ... ...; ... ... ...; }; int main() { vector v1, v2, v3; v3 و v2 و v1 های نام به شی سه ایجاد :اول خط cin >> v1 >> v2 >> v3; کرد سربارگزاری را cin عملگر باید :دوم خط v3 = v1 + v2; کرد سربارگزاری را ( + ) جمع عملگر باید :سوم خط v2 = v1 / v3; کرد سربارگزاری را ( / ) تقسیم عملگر باید :چهارم خط cout << v3; کرد سربارگزاری را cout عملگر باید :پنجم خط cout << v2; کرد سربارگزاری را cout عملگر باید :ششم خط getch(); return 0; } کالس توضیحقسمت در اگر گفتیم قبل مطالب طبق :main()دقیقا باید شد انجام اشیاء روی بر محاسباتی عملیات هر قسمت در باال کالس در که ،کنیم گزاری سربار را عملگر همانmain()زیر صورت به که است شده نوشته کدهایی :شوند می تعریف اول خطهای نام با شی سه جا این در :v1وv2وv3.است آمده وجود به دوم خطمشا جا این در :ورودی دستور توسط شی سه هر که کنیم می هدهcinمی گرفته ورودی ازبنابراین ،شوند عملگر بایدcin.کرد سربارگزاری را سوم خطشی دو جمع حاصل قسمت این در :v1وv2شی درv3) + ( جمع عملگر باید بنابراین ،شود می ریخته .کنیم سربارگزاری را چهارم خط:نیز قسمت این درشیv1شی بر تقسیم راv3شی در را آن حاصل و ایم کردهv2بنابراین ،ایم ریخته .کرد سربارگزاری را ) / ( تقسیم عملگر باید پنجم خطشی نیز مرحله این در :v3دستور از استفاده باcoutباید بنابراین ،است شده داده نمایش خروجی در عملگرcout.کرد سربارگزاری را ششم خطعملگر باید ،پنجم خط همانند نیز قسمت این در :cout.کرد سربارگزاری را نکته.-6عملگر ششم و پنجم خط در مثال .شود می سربارگزاری بار یک فقط عملگر هر که کنید دقت :cout نوشتها بار یک فقط اما ،است شدهقسمت در که تعداد هر به و کنیم می گزاری سربار را عملگر ینmain()مورد را آن ما چون آید نمی پیش مشکلی ،بگیرد قرار استفاده.ایم کرده سربارگزاریکه عملگرهایی اکثر فصل این در ما .کنیم می سربارگزاری را داریم سروکار ها آن با و گیرند می قرار استفاده مورد زیاد
50.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 50 فص این در است قرار که عملگرهاییا عبارت کنیم سربارگزاری را ها آن ل:از ند 1-) + ( جمع عملگر6-( تفریق عملگر-).-) * ( ضرب عملگر9-) / ( تقسیم عملگر5-( قرینه عملگر-) 2-) ++ ( افزایشی عملگر7-( کاهشی عملگر--)6-( ای مقایسه عملگرهای>و<)4-( دهی نسبت عملگر=) 11-( ترکیبی عملگرهای+=و*=و=-و/=)11-عملگرcin(>>)16-عملگرcout(<<.) توا می را عملگرها ایندر کلی صورت به نزیر صورت به گروه دو:کرد بندی دسته عملگرها عملوندی تک قرینه(-) افزایشی) ++ ( کاهشی(--) عملوندی دو جمع) + ( تفریق(-) ضرب) * ( تقسیم) / ( ( < و > ) ای مقایسه دهی نسبت) = ( ( /= و *= و -= و += ترکیبی( cin ( >> ) cout ( << )
51.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 51 عملوندی تک عملگرهای .شوند می تقسیم عملوندی دو و عملوندی تک اصلی دسته دو به عملگرها ،قبل جدول طبق یک روی بر فقط که باشد می معنی بدینما دهند می انجام محاسباتی عملیات عملوندنقرینه عملگر ندص بدین کهورت :شود می بیانa=28; b=-a;متغییر ابتداaعدد مساوی را28به دیگری متغییر در را آن قرینه و ایم داده قرار نامbکنید می مشاهده که طور همان .ایم ریختهکه عملوند یک روی بر فقط قرینه عملگرaمی عمل ،دارد نامو کند به را آن مقدار-28که باشند می عملوندی تک عملگرهای جز نیز کاهشی یا افزایشی عملگر مثال یا کند می تبدیل عملگر مثالبیان صورت بدین افزایشیشود میa=32; a++;ابتدا ،نیز جا این درمتغییرaعدد مساوی را.6 ه آخر در و ایم داده قرارعدد برابر پایانی جواب که ایم کرده اضافه آن به واحد یک م...شد خواهد ... یا ضرب یا جمع عملگر مانند دهند می انجام را محاسباتی عملیات عملوند دو روی بر عملوندی دو عملگرهای اما :کند می عمل صورت بدین جمع عملگر مثالa=12, b=6; c=a+b;نا به متغییر دو ابتداهای مaعدد با برابر که 12وbعدد با برابر که2و ایم کرده جمع هم با را مقدار دو این هم آخرسر در و ،ایم آورده وجود به را باشند می متغییر در را نهایی جوابcهای نام به متغییر دو روی بر جمع عملگر بنابراین .ایم ریختهaوbمحاسباتی عملیات دهند می انجام را،.باشد می عملوندی دو عملگر این بنابراین به توجه با عملگرهاساز پیاده فرم و ساختار نوع:شوند می بندی دسته زیر صورت به ی اساس بر عملگرها سازی پیاده ساختار ضرب و تفریق و جمع تقسیم و قرینه افزایشی و کاهشی ای مقایسه دهی نسبت ترکیبی cout و cin
52.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 52 در که طور همانکنید می مشاهده جدول اینپیاده ساختار و گیرند می قرار گروه یک در عملگرها از کدام هر ، مثال .باشد می فرم یک به ها آن سازیسربارگزاری اگرتفریق عملگرهای توانیم می ،باشیم گرفته یاد را جمع عملگر ضرب ووتقسیکنیم سازی پیاده راحتی به نیز را م.باشد می صورت یک به عملگر چهار این ساختار چون نکته.-.کلیدی ی کلمه از ،عملگری هر سربارگزاری برای همیشه :operator.کنیم می استفادهکار این برای :باشد می زیر صورت به که ،کنیم می ساری پیاده را عملگر آن سربارگزاری به مربوط تابع " اول قسمت " در ابتدا کلیدی کلمه عملگر نوع ) کالس اسم شی (operatorکالس اسم عملگ سربارگزاری برای مثالقس " در ،جمع رکالس اسم که این فرض (با :کنیم می عمل صورت بدین " اول مت vector.)باشد vector operator+(vector ob); کالس اسم جا این در کهvectorکلیدی ی کلمه سپس نویسیم می را آن ،باشد میoperatorبعد نویسیم می را به شی یک هم سر آخر در و کالس اسم پرانتزباز داخل بعد نویسیم می را کنیم سربارگزاری است قرار که عملگری کلیدی ی کلمه از بعد ،عملگری هر سربارگزاری برای همیشه بنابراین .آوریم می وجودoperartorعملگر آن باید .بنویسیم را نکته.-9::است شده نوشته کدی چنین پرانتز داخل در که کنید دقت( vector ob);اینکه باشد می معنی بدین نام به پارامتر یک دارای تابع اینobیعنی کالس خود نوع از ،آن بازگشتی نوع که باشد میvector.باشد می نکته.-5:مطالب دربه ما ،جمع محاسبات انجام برای بنابراین باشد می عملوندی دو جمع عملگر که گفتیم هم قبلی ،کالس بازگشتی نوع چون و شوند جمع هم با که داریم نیاز شی دوvectorاز استفاده با باید بنابراین ،باشد می دستورreturnعم انجام برای است قرار که ترفندی .دهیم بازگشت را شی یکمی صورت بدین دهیم انجام جمع لیات که باشدابتدا ،شی دو این آوردن وجود به برای .کنیم جمع هم با را ها آن سپس و آوریم وجود به را شی دو باید ابتدا ، هم با را ها آن و آوریم می وجود به تابع خود داخل در نیز را شی یک و فرستیم می پارامتر صورت به را شی یک .کنیم می جمع.باشد می ایم آورده وجود به تابع داخل در که شی همان ،شده داده بازگشت شی که کنید دقتدقت پس دستور از استفاده با را شی این باید پس ،ایم آورده وجود به تابع داخل در که است شی همان ما اصلی شی که کنید بازگشتیreturn.دهیم بازگشت " اول قسمت " در که این از بعده کد " دوم قسمت " در باید سپس ،نوشتیم را نظر مورد عملگر تابعآن به مربوط ای کنیم سازی پیاده را. نکته.-2در گروه یک صورت به که عملگرهایی سربارگزاری که کنید توجه خوب مهم بسیار ی نکته این به : نوش قبل جدولتیک به ،یمکه این به توجه با و شوند می سازی پیاده صورتقسمت درprivateاول قسمت " همان یا ،باشد گر اشاره بدون که این یا باشد داشته وجود گر اشاره ".کنیم می سازی پیاده را عملگر هر به مربوط ساختارکه پیاده را کدام هر به مربوط ساختار ،برنامه در گر اشاره فاقد یا گر اشاره وجود صورت در ترتیب به بعدی مطالب در م سازی.کنیم ی نکته.-7پارامتر یک دارای همیشه عملوندی دو عملگرهای ولی باشند می پارامتر بدون ،عملوندی تک عملگرهای : کالس خود نوع ازعدد نوع از پارامتر یک خاص مواقع بعضی در کاهشی و افزایشی عملگرهای فقط .باشند می .داد خواهیم توضیح را آن ادامه در که گیرند می صحیح
53.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 53 .-1عمل سربارگزاریتقسیم و ضرب و تفریق و جمع گرهای .باشند می کالس خود نوع از پارمتر یک دارای بنابراین ،باشند می عملوندی دو نوع از ،عملگر چهار ایندر اگر قسمتprivate:کنیم می عمل صورت بدین نداشت وجود گر اشاره class vector { float x, y, z; public: vector operator+(vector ob); public نوشتنعملگر بارگزاری سر به مربوط تابعقسمت در }; vector vector::operator+(vector ob) جمع سربارگزاری به مربوط متد سازی پیاده :اول مرحله { vector r; r نام به شی یک ایجاد :دوم مرحله r.x = ob.x + x; جمع عملیات انجام :سوم مرحله r.y = ob.y + y; … … … r.z = ob.z + z; … … … return r; شده ایجاد شی بازگشت :چهارم مرحله } ،قبل ی نکته طبقپا یک همیشه عملوندی دو عملگرهایرانوع که دارند مترمی کالس خود نوع از آن گشتی باز .باشدپیاده باال صورت به ها کالس ی همه برای را جمع عملگر بنابراین ،نداشت وجود گر اشاره ما برنامه در اگر .کنیم می سازی،قبل مطالب طبقشود می فرستاده پارامتر صورت به که شیobایجاد باید که دوم شی و دارد نام ،کنیمrشی ما نیز جا این در که ،دهیم بازگشت را ایم آورده وجود به که شی باید که گفتیم هم قبل ودر دارد نامrبا را بازگشتی دستور از استفادهreturn.دهیم می بازگشتو ضرب و تفریق عملگرهای سربارگزاری برای که کنید توجه نیز ،تقسیمکنیم می عمل باال صورت بهیا تفریق مثال آن جای به ،دیدیم جمع عملگر جا هر که تفاوت این با فقط . می تقسیم یا ضربتفریق عملگر زیر کالس مثال .نویسیم.کند می گزاری سربار را class vector { float x, y, z; public: vector operator-(vector ob); public نوشتنقسمت در عملگر بارگزاری سر به مربوط تابع }; vector vector::operator-(vector ob) سربارگزاری به مربوط متد سازی پیاده :اول مرحلهتفریق { vector r; r نام به شی یک ایجاد :دوم مرحله r.x = ob.x - x; عملیات انجام :سوم مرحلهتفریق r.y = ob.y - y; … … … r.z = ob.z - z; … … … return r; شده ایجاد شی بازگشت :چهارم مرحله }
54.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 54 اول مرحلهدر کنیم سربارگزاری است قرار که را عملگری ابتدا :ابدی " دوم قسمت " در یعنی قسمت ینصورت ن نویسیم میقسمت مانند را آن دقیقا .publicباید را تابع این بازگشتی نوع ،آن از قبل که تفاوت این با فقط نویسیم می یعنی کالس خود نوع از آن بازگشتی نوع که بنویسیمvectorباشد می. دوم مرحله.آوریم می وجود به شی یک ابتدا :قسمت در قبل مطالب در که طور همانmain()برای ،داشتیم نیز شی اسم جا این در که .نویسیم می را شی آن نام سپس کالس نام ابتدا شی یک ایجادt.باشد می سوم مرحلهمرحله این در :تفریق عملیات به مربوط دستورات بایدابتدا کار این برای .کنیم سازی پیاده رابایدبا استفادشده ایجاد شی از هتک تک بهقسمت متغییرهایprivateداشته دسترسی ) . ( نقطه کاراکتر از استفاده با مساوی کاراکتر یک سپس .باشیم( = )ب که را ای شی باید نیز دفعه این ،مساوی دیگر طرف در و دهیم می قراره را ایم فرستاده پارامتر صورتقسمت متغییرهای تک تک بهprivateدسترس در ) . ( نقطه کاراکتر از استفاده با قرار که کاراکتری نیز آخر در و بدهیم قرار خودقسمت متغییر سپس و نویسیم می را کنیم سربارگزاری است privateمتغییر جای به مثال فقط دهیم می انجام را عملیات همین باز بعد خط در سپس .نویسیم می راxمتغییر از که بعدیy.کنیم می استفاده دارد نامرا عملیاتی چنین ترتیب به ،باشیم داشته متغییر که تعداد هر به باید که این یعنی .دهیم انجام چهارم مرحلهنیز آخر قسمت در :ای شی همان یعنی ،ما اصلی شیدستور از استفاده با را ایم کرده ایجاد که بازگشتیreturn.دهیم می بازگشت طور همانمی مشاهده کهنیز تفریق عملگر سربارگزاری برای ،کنیدتفاوت این با کنیم می عمل جمع عملگر همانند جمع عملگر هرجا فقط کهتفریق عملگر آن جای به دیدیمقرار راوجود گر اشاره برنامه در اگر بنابراین .دهیم می تقسیم و ضرب و تفریق و (جمع عملگر چهار این سربارگزاری ،نداشت)و باشد می قبل سربارگزاری صورت به باال روش از ،کنیم سربارگزاری را عملگر چهار این بخواهیم که زمانی هر برایکنیم می استفادهی همه برای و .باشد می ثابت روند این ها کالس قسمت در اگر اماprivateمی عمل زیر صورت به عملگر چهار این گزاری سربار برای ،داشت وجود گر اشاره :کنیم class vector { float n; باشد می بردار بعدهای تعداد ،n متغییر flo at *p; p نام به گر اشاره یک public: vector operator*vector ob); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector::operator*(vector ob) اول مرحلهساز پیاده :سربارگزاری به مربوط متد یضرب { مرحلهنام به شی یک ایجاد :دومrvector r(n); if (n != ob.n) if مرحلهدستور یک ایجاد :سوم { cout << "Error!"; مرحلهچهارخطا پیغام یک ایجاد :م } for (int i = 0; i<n; i++) for مرحله:پنجمحلقه یک نوشتن { r.a[i] = a[i] * ob.a[i]; مرحلهعملیات انجام :ششمضرب
55.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 55 return r; return مرحلهدستور از استفاده با شده ایجاد شی بازگشت :هفتم } نکته.-6آوریم می وجود به که را ای شی ،داشتیم گر اشاره وقتی کنید دقت :قسمت متغییر بایدprivateخل در را بنویسیم آن.:زیر صورت به :نبود گر اشاره وقتیvector r; :داشتیم گر اشاره وقتیvector r(n); ،باال قسمت در کهrمی شده ایجاد شیآن جلوی در که باشدقسمت متغییرprivate.ایم آورده رامی معنی بدین این شی که باشدrدارایn.باشد می بعد مرحلهاولصورت بدین " دوم قسمت " در یعنی قسمت این در کنیم سربارگزاری است قرار که را عملگری ابتدا : قسمت مانند را آن دقیقا .نویسیم میpublicباید را تابع این بازگشتی نوع ،آن از قبل که تفاوت این با فقط نویسیم می یعنی کالس خود نوع از آن بازگشتی نوع که بنویسیمvector.باشد می دوم مرحلهقسمت در قبل مطالب در که طور همان .آوریم می وجود به شی یک ابتدا :main()برای ،داشتیم نیز شی اسم جا این در که .نویسیم می را شی آن نام سپس کالس نام ابتدا شی یک ایجادr.باشد میاگر ،قبل مطالب طبق ایج که ای شی ،داشتیم گر اشارهبا کنیم می ادیدقسمت داخل متغییرprivateآن جلوی پرانتز یک داخل در را .بنویسیم سوم مرحلهدستور یک مرحله این در :ifآن داخل در و آوریم مییا بردار بعدهای تعداد اگر که گذاریم می شرط قسمت متغییر همانprivateکهnبا مخالف ،باشد میباشد شده فرستاده پارامتری(بدین اینتعداد که باشد می معنی فر پارامتر صورت به که ای شی با بردار های بعدنیست برابر ایم ستاده،)مبتنی پیغام یک بعد مرحله دربخطا ر .کند چاپ چهارم مرحلهپیغام یک قسمت این در :" Error ";.کنیم می چاپ پنجم مرحلهداش وجود گر اشاره ما برنامه در اگر که گفتیم هم قبال :ی حلقه از باید ،تforاین در .کنیم استفاده حلقه یک مرحلهforتا صفر عدد از و نویسیم میn-1.کنیم می شمارش را باشد می بردار بعدهای تعداد همان که از منظورn-1همان<n.باشد می ششم مرحلهداشت وجود گر اشاره برنامه در اگر که گفتیم هم قبل مطالب در :ه داده تمام ،اشاره داخل در ما ایگر مرحله این در .دهیم انجام گرها اشاره روی بر باید ،دهیم انجام بخواهیم که را محاسباتی عملیات هر و گیرند می قرار عملیات دادن انجام برایضرباستفاده گر اشاره بدون حالت مانند ،دیگ که تفاوت این با فقط کنیم میداخل در رحلقه forکد خط یک فقطداخل در قسمت این در چون .نویسیم میprivateاز متغییرها این جای به پس ،نداریم متغییر قسمت در موجود گر اشارهprivate.کنیم می استفاده :نداشتیم گر اشاره که وقتیr.x = ob.x * x; r.y = ob.y * y; r.z = ob.z * z :داشتیم گر اشاره که وقتیr.a[i] = a[i] * ob.a[i]; گر اشاره بودن صورت در )تقسیم و ضرب و تفریق و (جمع عملگر چهار این برای ،بینید می باال در که طور همان م عمل باال صورت به ،گر اشاره نبود یاقسمت متغییرهای جای به فقط ،داشتیم گر اشاره اگر .کنیم یprivateاشاره ، موجود گر.نویسیم می را برنامه در .-6قرینه عملگر سربارگزاری
56.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 56 .کند می فرق کمی آن سازی پیاده ،گر اشاره نبود یا گر اشاره وجود صورت در نیز عملگر این،قبل مطالب طبق عملگر مانند عملگرهایی.هستند پارامتر فاقد ،باشند می عملوندی تک که قرینه :باشد می زیر صورت به عملگر این سربارگزاری ،نداشت وجود گر اشاره برنامه در اگر class vector { private: float x, y, z; public: vector operator-(); public سر به مربوط تابع نوشتنقسمت در عملگر بارگزاری }; vector vector::operator-() سربارگزاری به مربوط متد سازی پیاده :اول مرحلهقرینه { vector r; r نام به شی یک ایجاد :دوم مرحله r.x = -x; عملیات انجام :سوم مرحلهقرینه r.y = -y; … … … r.z = -z; … … … return r; شده ایجاد شی بازگشت :چهارم مرحله } فقط و نداریم پارامتر جا این در که تفاوت این با فقط شود می سربارگزاری جمع عملگر مانند تقریبا نیز عملگر این بازگشتی دستور از استفاده با نیز را آن و کنیم می قرینه را ایم آورده وجود به که را ای شیreturnمی بازگشت ،نداریم گر اشاره جا این در چون بنابراین .دهیمتک تک به ) . ( نقطه کاراکتر از استفاده با را شده ایجاد شی باز قسمت های متغییرprivateرا متغییرهار این تمام و دهیم می قرار مساوی کاراکتر و دهیم می قرار خود دسترس در .کنیم می قرینه اول مرحلهدر یعنی قسمت این در کنیم سربارگزاری است قرار که را عملگری ابتدا :صورت بدین " دوم قسمت " قسمت مانند را آن دقیقا .نویسیم میpublicباید را تابع این بازگشتی نوع ،آن از قبل که تفاوت این با فقط نویسیم می یعنی کالس خود نوع از آن بازگشتی نوع که بنویسیمvector.باشد می دوم مرحلهمط در که طور همان .آوریم می وجود به شی یک ابتدا :قسمت در قبل البmain()برای ،داشتیم نیز شی اسم جا این در که .نویسیم می را شی آن نام سپس کالس نام ابتدا شی یک ایجادr.باشد می سوم مرحلهمی انجام را قرینه به مربوط عملیات ،مرحله این در :یک در را ها داده تمام باید فقط قرینه برای .دهیم ( منفی-ک ،کنیم ضرب )های نام به متغییر سه ما های داده اینجا در هxوyوzدر را ها آن تک تک که باشد می .ایم کرده ضرب منفی یک چهارم مرحلهبه که ای شی نیز مرحله این در :بازگشتی دستور از استفاده با را ایم آورده جودreturnمی بازگشت .دهیم صورت به داشت وجود گر اشاره برنامه در اگر:کنیم می عمل زیر class vector { private:
57.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 57 float n; باشد می بردار بعدهای تعداد ،n متغییر flo at *p; p نام به گر اشاره یک public: vector operator-(); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector operator-() قرینه عملگر به مربوط متد سازی پیاده :اول مرحله { vector r(n); r به شی یک ایجاد :دوم مرحلهنام for (int i = 0; i < n; i++) for حلقه یک نوشتن :سوم مرحله { r.p[i] = -p[i] قرینه عملیات انجام :چهارم مرحله } return r; بازگشت :پنجم مرحلهشده ایجاد شی } اول مرحلهصورت بدین " دوم قسمت " در یعنی قسمت این در کنیم سربارگزاری است قرار که را عملگری ابتدا : قسمت مانند را آن دقیقا .نویسیم میpublicباید را تابع این بازگشتی نوع ،آن از قبل که تفاوت این با فقط نویسیم می یعنی کالس خود نوع از آن بازگشتی نوع که بنویسیمvector.باشد می دوم مرحلهقسمت در قبل مطالب در که طور همان .آوریم می وجود به شی یک ابتدا :main()برای ،داشتیم نیز ک نام ابتدا شی یک ایجادشی اسم جا این در که .نویسیم می را شی آن نام سپس السr.باشد میاگر ،قبل مطالب طبق قسمت داخل متغییر باید کنیم می ایجاد که ای شی ،داشتیم گر اشارهprivateآن جلوی پرانتز یک داخل در را .بنویسیم سوم مرحلهی حلقه از باید ،داشت وجود گر اشاره ما برنامه در اگر که گفتیم هم قبال :forاین در .کنیم استفاده حلقه یک مرحلهforتا صفر عدد از و نویسیم میn-1.کنیم می شمارش را باشد می بردار بعدهای تعداد همان که از منظورn-1همان<n.باشد می چهارم مرحلهعم مرحله این در :با را شده ایجاد شی کار این برای .دهیم می انجام را قرینه عملگر به مربوط لیات را گر اشاره و دهیم می قرار مساوی یک سپس و دهیم می نسبت برنامه گر اشاره به ) . ( نقطه کاراکتر از استفاده که کنید دقت .میکنیم ضرب منفی یک دراشا این داخل در ما های داده تماممی گر رهبنابراین باشندبایبر درواین ی .دهیم انجام را سازی قرینه عملیات گر اشاره پنجم مرحلهبازگشتی دستور از استفاده با را شده ایجاد شی نیز مرحله این در :return.دهیم می بازگشت .-.سرباکاهشی و افزایشی عملگرهای رگزاری ایم داده جای گروه یک در را عملگر دو این چون،باشیم بلد را ها آن از یکی سربارگزاری اگر بنابراین ، نبود یا برنامه در گر اشاره وجود تحت هم عملگر این .گیرد می انجام راحتی به نیز دیگری عملگر سربارگزاری .شود می سربارگزاری زیر صورت وبه گیرد می قرار بررسی مورد ،برنامه در گر اشارهدر ها نکته این به ابتدا :کنید دقت عملگر این مورد نکته.-4اند عبارت که گیرند می قرار استفاده مورد نویسی برنامه در صورت دو به کاهشی و افزایشی عملگرهای : .پسوندی و پیشوندی :از
58.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 58 1-پیشوندیافزایشی عملگر برای مثال :(++):باشد می صورت این به پیشوندی نوع ، int a=23; ++a; افزایشی عملگر ،کنید می مشاهده که طور همان(++)متغییر از قبلa:آید می صورت بدین++a;معنی بدین این که میمتغییر به که هنگامی ، که باشدaمقدار مثال6.به واحد یک بالفاصله ،شود می داده نسبتaو شود می اضافه عدد به آن مقدار69افزایشی عملگرهای ،نوع این به .کند می تغییر،.گویند می پیشوندی 6-پسوندیافزایشی عملگر برای مثال :(++)پسوندی نوع ،:باشد می صورت این به int a=23; a++; افزایشی عملگر ،کنید می مشاهده که طور همان(++)بعدمتغییر ازa:آید می صورت بدینa++;معنی بدین این که متغییر به که هنگامی ، که باشد میaمقدار مثال6.به واحد یک بالفاصله ،است شده داده نسبتaاضافهنمی،شود شود می اضافه آن به واحد یک بعد مرحله در سپس گیرد می قرار محاسبه مورد ابتدا بلکها به .عملگرهای ،نوع ین افزایشی،پسوندی.گویند می نکته.-11عملگ که کنید دقت :ت عملگرهای ،کاهشی و افزایشی رهایمی پارامتر بدون پس ،باشند می عملوندی ک .باشندخوب نکته این به اما،بیایند پیشوندی صورت به عملگرها این اگر که کنید دقت.باشند می پارامتر بدونولی پسو صورت به اگربی ندی،ایندیکصحیح عدد نوع از پارامتر(int).گیرند می:زیر صورت به :پیشوندی صورت بهvector operator++(); :پسوندی صورت بهvector operator++(int x); نکته.-11سربار :.باشند می متفاوت کمی ،پسوندی و پیشوندی صورت به کاهشی و افزایشی عملگرهای گزاری که مطالبی طبقپیشوندی صورت به کاهشی و افزایشی عملگرهای سربارگزاری برای ،گفتیم قبل درب ابتدا ،یک اید مت تک تک تک به واحدقسمت غییرهایprivateایم کرده ایجاد که ای شی از استفاده با را ها آن سپس ،کنیم اضافه قسمت متغییرهای تمام بهprivateبدهیم قرار خود دسترس دربر بنابراین .بدی پیشوندی حالت ایمی عمل صورت ن :کنیم x=x+1; r.x=x; متغییر به واحد یک ابتدا ،باال دستور طبقxآن سپس ،شده اضافهراشده ایجاد که ای شی دسترس درشده داده قرار .کنیم می عمل باال صورت به پیشوندی حالت برای بنابراین .است باهم را کد دو این جای که است کافی فقط ،کنیم سازی پیاده پسوندی صورت به را عملگرها این بخواهیم اگر اما تک تک به را شده ایجاد شی ابتدا که این یعنی کنیم عوضقسمت متغییرهایprivateسپس بدهیم قرار دسترس در :زیر صورت به .کنیم اضافه ها آن ی همه به واحد یک بعد مرحله در r.x=x; x=x+1; سرباپیش صورت به افزایشی عملگر گزاری ر:نداریم گر اشاره که زمانی برای وندی class vector { private: float x, y, z; public: vector operator++(); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector::operator++() افزایشی عملگر سربارگزاری به مربوط متد نوشتن :اول مرحله { vector r; r نام با شی یک ایجاد :دوم مرحله
59.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 59 x = x+1; س مرحلهافزایشی عملیلت انجام :وم y = y+1; .... ... .. z = z+1; ... ... ... r.x = x; ... ... ... r.y = y; ... ... ... r.z = z; ... ... ... return r; :شده ایجاد شی بازگشت :چهارم مرحله } اول مرحله.نویسیم می قسمت این در کنیم سربارگزاری است قرار که را عملگری ابتدا : دوم مرحلهنام به شی یک :r.آوریم می وجود به سوم مرحله:عمل صورت بدین کار این برای .دهیم می انجام را افزایشی عملگر به مربوط عملیات مرحله این در قسمت اول متغییر ابتدا :کنیم میprivateجا این در کهxقرار خودش با مساوی را آن سپس نویسیم می را باشد می متغیی سپس .شود اضافه آن به واحد یک باید که تفاوت این با ،دهیم میکه بعدی رهایyوzبه نیز را باشند می ترتیببدیقسمت متغییرهای تمام به که وقتی .نویسیم می صورت نprivate،کردیم اضافه واحد یک روش این با قسمت متغییرهای تک تک به ) . ( نقطه کاراکتر از استفاده با و کردیم درست که ای شی از استفاده با باید سپس privateداش دسترسی.باشیم ته چهارم مرحلهبازگشتی دستور از استفاده با را ایم کرده ایجاد که را ای شی نیز مرحله این در :returnمی بازگشت .دهیم پسوندی صورت به افزایشی عملگر سازی پیاده:نداریم گر اشاره که زمانی برای class vector { private: float x, y, z; public: vector operator++(); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector::operator++(int x) افزایشی عملگر سربارگزاری به مربوط متد نوشتن :اول مرحله { vector r; r نام با شی یک ایجاد :دوم مرحله r.x = x; افزایشی عملیلت انجام :سوم مرحله r.y = y; ... ... ... r.z = z; ... ... ... x = x+1; ... ... ... y = y+1; ... ... ... z = z+1; ... ... ... return r; :شده ایجاد شی بازگشت :چهارم مرحله }
60.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 60 اول مرحله.نویسیم می را عملگر این سربارگزاری به مربوط تابع ابتدا : دوم مرحله.کنیم می ایجاد شی یک : سوم مرحلهرا آن قبل های قسمت در که کنیم می سازی پیاده را عملگرافزایشی سربارگزاری به مربوط عملیات : داده توضیح.ایم چهارم مرحله:ای شی ،نیز مرحله این دربازگشتی دستور از استفاده با را ایم کرده ایجاد کهreturnمی بازگشت .دهیم :داریم گر اشاره که زمانی برای پیشوندی صورت به کاهشی عملگر گزاری سربار class vector { private: float *p; float n; public: vector operator--(); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector--() کاهشی عملگر سربارگزاری به مربوط متد نوشت :اول مرحله { vector r(n); r نام به شی یک ایجاد :دوم مرحله for (int i = 0; i < n; i++) for حلقه یک نوشتن :سوم مرحله { p[i] = p[i] - 1; کاهشی عملیات انجام :چهارم مرحله r.p[i] = p[i]; ...... ... } return r; شده ایجاد شی بازگشت :پنجم مرحله } گر اشاره برنامه در که وقتی ،بینید می باال قسمت در که طور هماناز ،باشد داشته وجودی حلقهforمی استفاده ،قسمت این داخل دستورات و کنیمباشد می قبلی قسمت همانند نیز قسمت این عملیات تمام بنابراین .باشد می تر کوتاه قسمت متغییرهای جای به که تفاوت این با فقطprivateیاد به نیز هم را نکته این .کنیم می استفاده گر اشاره از ، ددر پرانتز از استفاده با باید کنیم می درست که را ای شی ،باشیم داشته گر اشاره برنامه در که وقتی ،باشید اشته قسمت متغییر ،آن داخلprivateهمان کهn)بردار بعدهای (تعداد.بنویسیم را :داریم گر اشاره که زمانی برای پسوندی صورت به کاهشی عملگر سربارگزاری class vector { private: float *p; float n; public:
61.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 61 vector operator--(int x); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector--() نوشت :اول مرحلهنکاهشی عملگر سربارگزاری به مربوط متد { vector r(n); r نام به شی یک ایجاد :دوم مرحله for (int i = 0; i < n; i++) for حلقه یک نوشتن :سوم مرحله { r.p[i] = p[i]; کاهشی عملیات انجام :چهارم مرحله p[i] = p[i] - 1; ... ... ... } return r; شده ایجاد شی بازگشت :پنجم مرحله } صحیح عدد نوع از پارامتر یک جا این در که تفاوت این با فقط باشد می پیشوندی همانند ،نیز نوع این سربارگزاری (int)حلقه داخل کدهای فقط و داریمforعملگر دو این ما که کنید دقت بنابراین .نویسیم می جا به جا رابه هم را ها کالس تمامی برای پس ،دایم قرار بررسی مورد گر اشاره با یا گر اشاره بدون و پسوندی هم و پیشوندی صورت سر نوعصورت بدین عملگر دو این بارگزاریکردیم سازی پیاده را آن که بودبرنامه در که این به توجه با بنابراین ، ساختا و دستورات ،نه یا داشت وجود گر اشاره.کنیم می سازی پیاده ،گفتیم که مطالبی این طبق را هرکدارم ر .-4ای مقایسه عملگرهای سربارگزاری .باشد می پارامتر دارای بنابراین ،باشد می عملوندی دو نوع از عملگر اینبقیه خالف بر ای مقایسه عملگر بازگشتی نوع دارای ،عملگرهاintروی بر محاسباتی عملیات باید ابتدا شی دو روی بر مقایسه انجام برای .باشد می تابع یک به عملگر این از استفاده برای بنابراین .دهیم قرار مقایسه مورد هم با را ها آن سپس ،دهیم انجام ها آن نام به محاسباتیcalculateمناسب محاسبات ،خود نیاز به توجه با که داریم نیازسپس و داده انجام اشیاء روی بر را در که را اشیایی ،متد این داخل در و نویسیم می را ای مقایسه عملگر سربارگزاری به مربوط متد ،دوم مرحله در متد داخلcalculateدادیم قرار محاسبه موردبین مقایسه عملیلت انجام برای که کنید دقت .کنیم می مقایسه هم با را صور در ،شی دومقدار ،دوم شی به نسبت اول شی بودن بزرگ ت1مقدار صورت این غیر در ،1می داده بازگشت صورت به متد این بازگشتی نوع که است همین خاطر به .شودintپس .باشد میبربه ،عملگر این سربارگزاری ای نام به محاسباتی تابع یکcalculate.داریم نیاز نیزمتد داخل در که کنید دقتcalculateکه عملیاتی به بستگی ، متد داخل در خواهیم می قسمت این در مثال .کنیم می سازی پیاده را دستورات ،بدهیم انجام است قرارcalculate، .آوریم بدست را بردارها ی اندازهبردار هر اندازه آوردن بدست برای:کنیم عمل زیر فرول طبق است کافی ، √ 𝑥 ∗ 𝑥 + 𝑦 ∗ 𝑦 + 𝑧 ∗ 𝑧 + ⋯ جا این در که را بردار هر بعدهای تک تک باید بنابراینxوyوzرادیکال زیر در صورت بدین را باشند می .نوشت متد یک نوشتنcalculateاستفاد برای:ای مقایسه عملگر سربارگزاری در ه)گر اشاره (بدون class vector
62.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 62 { private: float x, y, z; public: float calculate(); calculate :نام به محاسباتی تابع یک نوشتن }; float vector::calculate() محاسباتی عملیات انجام به مربوط متد نوشتن :اول مرحله { float s; s نام به متغییر یک ایجاد :دوم مرحله s = (x*x)+(y*y) +(z*z); بردارها اندازه ی محاسبه :سوم مرحله return sqrt(s); بردارها اندازه دادن بازگشت :چهارم مرحله } اول مرحلهرا آن به مربوط کدهای بعدی های قسمت در و مینویسیم صورت بدین را نظر مورد متد ،قسمت این در : .کنیم می سازی پیاده دوم مرحلهابت ،بردارها مقدار کردن ذخیر برای :فر حاصل و آوریم وجود به متغییر یک باید دامآن در را قبل ول .بریزیم سوم مرحلهقسمت در ما که کنید دقت .آوریم می بدست را قبل فرمول حاصل قسمت این در :privateمتغییر سه جمع حاصل سپس ،کنیم ضرب هم در را متغییرها این تک تک ابتدا قبل فرمول طبق باید بنابراین ،داریمه آندر را ا متغییرs.بریزیم چهارم مرحلهمتغییر در که متغییرهایی ی همه جمع حاصل از نیز مرحله این در :sتابع از استفاده با اند شده ریخته sqrt()بازگشتی دستور از استفاده با و گیریم می جذرreturn.دهیم می بازگشت را رادیکالی مقدار این نکته.-16تابع از ،مقدار یک گرفتن جذر برای که کنید دقت :sqrt()ای کتابخانه فایل در موجودmath.hاستفاده :صورت بدین .کنیم می #include<math.h> .کنیم اضافه برنامه اول قسمت به نیز را ای کتابخانه فایل این باید بنابراین :نداشتیم گر اشاره که زمانی برای ای مقایسه عملگر سربارگزاری class vector { private: float x, y, z; public: int operator<(vector rop); public نوشتقسمت در عملگر سربارگزاری به مربوط متد ن }; int vector::operator<(vector rop) :اول مرحلهعملگر سربارگزاری به مربوط متد نوشتن { if (calculate() < rop.calculate) انجام :دوم مرحلهای مقایسه عملیات return 1; عدد ،ای مقایسه عملیات بودن درست صورت در :سوم مرحله1شود می داده بازگشت return 0; چهارم مرحلهاشتباه صورت در :عدد ،ای مقایسه عملیات بودن1می داده بازگشتشودذ }
63.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 63 اول مرحلهمی صورت بدین را ای مقایسه عملگر به مربوط متد ابتدا :.نویسیم دوم مرحلهقسم این در :تمقدار ،بود دوم شی از کوچکتر اول شی اگر که کنیم می چک1صورت این غیر در ، مقدار1شود داده بازگشتهمان یا محاسباتی متد باید ما کار این برای .calculateچون ،دهیم قرار مقایسه مورد را ا کرده محاسبه متد این داخل در را بردار اندازهشرطی دستور یک از کار این برای .یمifداخل در و کنیم می استفاده متد ابتدا ،آنcalculateشی از استفاده با سپس نویسیم می راایم فرستاده پارامتر صورت به که ایمتد ،calculate قر خود دسترس در ) . ( نقطه کاراکتر از استفاده با رامو هم با را دو این و دهیم می ارردم.دهیم می قرار قایسه د ما که کنید دقتعملگر جا این ر( < )،بعدی عملگر .باشد می )تر (کوچک معنی به عملگر این که ایم نوشته را( > )سازی پیاده هنگام در باید بنابراین .باشد می )تر (بزرگ معنای به.ننویسیم اشتباه را ها آن سوم مرحلهمقا عملگر از ما جا این در چون :کوچکتر ای یسه( < )شی از اول شی اگر بنابراین ،کنیم می استفاده ،بود تر کوچک دوممقدار1.شود می داده بازگشت چهارم مرحلهمقدار ،نبود تر کوچک دوم شی از اول شی اگر اما :1.شود می داده بازگشت نکته.-1.استفاده با را آوریم می وجود به تابع داخل در که را ای شی ،عملگرها اکثر سربارگزاری در تقریبا : بارگشتی ازدستورreturnو آوریم نمی وجود به شی ،عملگرها از برخی سربارگزاری برای اما .دهیم می بازگشت بهگر اشاره ،آن جایthis:دهیم می بازگشت صورت بدین راreturn *this; گر اشارهthisحاوی و شود می فرستاده ها آن به اتوماتیک طور به اشیاء فراخوانی زمان در گر اشاره این : شی ایجاد به قادر دالیلی به که عملگرهایی از بعضی سربارگزاری در بنابراین .باشد می فراخواننده شی اطالعات کنیم استفاده گر اشاره این از توانیم می ،نیستمبازگشتی دستور از استفاده با را آن وreturnبرای مثال .دهیم بازگشت .کنیم می استفاده روش این از ،دهی نسبت عملگر سربارگزاری .-5دهی نسبت عملگر سربارگزاری خود که کنید دقتC++گر اشاره که مواقی در اما ،است داده انجام ما برای را دهی نسبت عملیات فرض پیش طور به فرض پیش تعریف همان از و کنیم سربارگزاری را عملگر این که نیست الزم ،نداشتیمC++.کنیم می استفادهامااگر حت را دهی نسبت عملگر سربارگزای باید ،داشت وجود گر اشاره ما برنامه دربدهیم انجام ماپیش تعریف باید یعنی ، فرضC++دهیم انجام عملگر این سربارگزاری از استفاده با را عملیات این ما خود و کنیم لغو را.دهی نسبت عملگر عمل این با رابطه در اما ،باشد می عملوندی دو نیز:کرد دقت زیر نکته چند به باید گر نکته.-19:سربارگزا برای عملگر ایننام به کاراکتر یک به نیاز خود متد در ،ریrefrence( & )به که دارد :شود می سربارگزاری زیر صورت :نداشتیم گر اشاره که وقتی برای دهی نسبت عملگر سربارگزاری class vector { private: float x, y, z; public: vector & operator=(vector & ob); public :قسمت در عملگر سربارگزاری به مربوط متد نوشتن
64.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 64 }; polynomial::polynomial & operator=(polynomial & ob) به مربوط متد نوشتن :اول مرحله { عملگر سربارگزاریدهی نسبت x = ob.x; دهی نسبت عملیات انجام :دوم مرحله y = ob.y; ... ... ... z = ob.z; ... ... ... return *this; *this گر اشاره توسط شی بازگشت :سوم مرحله } وقتی ،گفتیم که طور همانبرای اما .نیست دهی نسبت عملگر سربارگزاری به نیازی ،نداشتیم گر اشاره برنامه در هنگام فقط .ایم کرده سربارگزاری را آن ،شوید آشنا عملگر این سربارگزاری نحوه با که اینداشتیم گر اشاره که ی، .کنیم سربارگزاری را دهی نسبت عملگر بایدای در ،گفتیم هم قبال که طور همانکاراکتر از ما نجاrefrence) & ( یک ،دهی نسبت عملگر سربارگزاری برای همیشه که صورت بدین ،کنیم می استفادهrefrenceکالس اسم از قبل را .دهیم می قرار پاارمتر از قبل نیز را یکی و اول مرحله.کنیم سازی پیاده را آن ساختار تا نویسیم می شکل بدین را متد این ابتدا : دوم مرحلهمتغییرهای تک تک :کنیم می عمل صورت بدین ،دهیم می انجام را دهی نسبت عملیات ،قسمت این در : قسمتprivate،دارد وجود تابع در که پارامتری از استفاده با و دهیم می قرار مساوی کاراکتر سپس ،نویسیم می را جا این در کهobقسمت متغییرهای تک تک ،باشد میprivateخود دسترس در ) . ( نقطه کاراکتر از استفتده با .دهیم می قرار سوم مرحله:گر اشاره باید ،ایم نیاورده وجود به شی چون مرحله این درthisبازگشتی دستور از استفاده با را return.دهیم بازگشت :داشت وجود گر اشاره برنامه در که زمانی برای دهی نسبت عملگر سربارگزاری class vector { private: float *p; float n; public: vector & operator=(vector & ob); public :قسمت در عملگر سربارگزاری به مربوط متد نوشتن }; polynomial & polynomial::operator=(polynomial & ob) مربوط متد نوشتن :اول مرحلهبه { دهی نسبت عملگر سربارگزاری if (n != ob.n) if دستور یک نوشتن :دوم مرحله { delete[]p; قبلی گر اشاره حافطه بردن بین از :سوم مرحله p = new float[ob.n]; ح یک ایجاد :چهارم مرحلهپویا های آرایه از استفاده با جدید افطه } if (!p) آن داخل در و دهیم می قرار if شرط یک :پنجم مرحله { cout << "Erorr!"; کنیم می چاپ " Erorr " یکپیغام
65.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 65 exit(1); شویم می خارج برنامه از exit(1) استفاده با ودستور از } n = ob.n; دهیم می قرار متد پارامتر با مساوی را private متغییرداخل :ششم مرحله for (int i = 0; i < ob.n; i++) نویسیم می for ی حلقه یک :هفتم مرحله { p[i] = ob.p[i]; دهیم می قرار متد پارامتر با مساوی را ها داده تمام :هشتم مرحله } return *this; this گر اشاره بازگشت :نهم مرحله } ما دقیقا دهی نسبت عملگر ساختار که کنید دقت مهم نکته این بهدر که تفاوت این با باشد می کپی سازنده ساختار نند عملگر توان می ،کپی سازنده ابتدای در خط دو این نوشتن با و شده اضافه کپی سازنده ساختار به به خط دو جا این .کرد سربارگزاری راحتی به را دهی نسبت اول مرحلههای مرحله در و نویسیم می صورت بدین را متد ابتدا،این در :.کنیم می سازی پیاده را آن ساختار بعد دوم مرحلهقسمت متغییر اگر که کنیم می چک مرحله این در :privateهمان کهnبا مخالف ،)بردار بعدهای (تعداد ،بود متد داخل پاارمترببرد بین از را آن بعد مرحله در. سوم مرحله،قسمت این در :ای حافطهکهبرنامه گر اشارهجا این در کهpدارد نامرا کند می اشاره آن بهبا دستور از استفادهdelete.بریم می بین از ، چهارم مرحلهمی استفاده پویا های آرایه از استفاده با شده فرستاده پارامتر اندازه به جدید حافطه یک مرحله این در : مطال در را پویا های آرایه توسط حافطه ایجاد (روش .کنیم.)ایم گفته قبلی ب پنجم مرحلهدستور یک مرحله دراین :ifگر اشاره به ای حافظه اگر که کنیم می چک آن داخل در و نویسیم می پیغام یک ،باشد نداشته وجود گر اشاره که این یا باشد نشده داده اختصاص" Erorr "چاپتابع از استفاده با و exit(1).شویم می خارج برنامه از مرحلششم هبع تعداد سپس :بردار دهایجا این در کهn.دهیم می قرار تابع پارامتر مساوی را باشد می هفتم مرحله:حلقه یکforتا یعنی بردار بعد آخرین تا صفر از و نویسیم میob.n.کنیم می پیمایش را هشتم مرحلهپا برابر را ها داده تمام :را.دهیم می قرار تابع متر نهم مرحلهبازگشتی دستور از استفاده با نیز آخر در و :returnگر اشاره ،this.دهیم می بازگشت را که هایی کالس تمامی برای بنابراین ،کنیم می عمل قبل صورت به ،دهی نسبت عملگر سربارگزاری برای همیشه .کنیم می سازی پیاده را آن قبل صورت به ،کنیم سربارگزاری را عملگر این بخواهیم .-6عملگرهای گزاری سربارترکیبی وجود گر اشاره برنامه در که این به توجه با که کند می پیروی خاصی ی قاعده از هم عملگرها این سربارگزاری .کنیم می سازی پیاده را هرکدام ساختار ،نه یا باشد داشته ع این که باشند می )تقسیم و ضرب و تفریق و (جمع شامل ترکیبی های عملگر:شوند می نوشته صورت بدین ملگرها int a=20, b=15; a+=b; a-=b; a*=b; a/=b; تفاوت این با فقط کنند می عمل )تقسیم و ضرب و تفریق و (جمع عملگرهای مانند دقیقا عملگرها این حاصل کهتیجه :گیرد می قرار استفاده قابل زیر صورت دو از یکی به عملگر این .ریزد می دوم عملگر در را
66.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 66 vector v1(3, 2), v2(4, 1); v1 += v2; v1 بردار در نتیجه مقدار دادن قرار و v2 بردار با v1 بردار جمع :اول روش vector v1(3, 2); v1 += 6; v1 عدد با2بردار در نتیجه مقدار دادن قرار و v1 بردار جمع :دوم روش .)گر اشاره (بدون .هم با بردار دو جمع برای += ترکیبی عملگر سربارگزاری class vector { private: int x, y, z; public: vector operator+=(vector ob1); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن }; vector vector::operator+=(vector ob1) ترکیبی عملگر سربارگزاری به مربوط متد نوشتن :اول مرحله { x = ob1.x + x; ترکیبی عملگر سربارگزاری :دوم مرحله y = ob1.y + y; … … … z = ob1.z + z; ... ... ... return *this; this گر اشاره بازگشت :سوم مرحله } و ایم کرده جمع هم با را بردار دو که این یعنی .ایم داده قرار بررسی مورد را اول روش ما ،باال سربارگزاری در بن .ایم ریخته اول بردار در را نتیجهیعنی کالس خود نوع از ما پارامتر ابراینvector.باشد می .نویسیم می صورت بدین را عملگر سربارگزاری به مربوط تابع ابتدا در : اول مرحله برای .دهیم می انجام را ترکیبی صورت به جمع عملگر سربارگزاری به مربوط عملیات مرحله این در : دوم مرحله قسمت داخل متغییرهای تک تک ابتدا باید ما کار اینprivateو بدهبم قرار را مساوی کاراکتر سپس و بنویسیم را ن می را باشد می کالس خود نوع از که را متد پارامتر بعدتک تک به را آن ) . ( نقطه کاراکتر از ستفاده با و ویسیم قسمت متغییرهایprivateداخل متغییر دوباره ادامه در و نظر مورد کاراکتر سپس و دهیم می قرار خود دسترس در قسمتprivateقسمت در متغییر که تعداد هر به بنابراین .نویسیم می راprivateر عملیات این ،باشیم داشتهباید ا .بدهیم انجام گر اشاره باید بنابراین ،ایم نیاورده وجود به را ای شی چون : سوم مرحلهthis.بدهیم بازگشت را = ترکیبی عملگر سربارگزاری-)گر اشاره (بدون .عدد یک از بردار یک تفریق برای class vector { private: int x, y, z; public: vector operator-=(int a); public قسمت در عملگر بارگزاری سر به مربوط تابع نوشتن
67.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 67 }; vector vector::operator-=(int a) ترکیبی عملگر سربارگزاری به مربوط متد نوشتن :اول مرحله { x = x - a; ترکیبی عملگر سربارگزاری :دوم مرحله y = y - a; ... ... ... z = z - a; ... ... ... return *this; this گر اشاره بازگشت :سوم مرحله } داده قرار بررسی مورد را دوم روش ما باال سربارگزاری درکرده جمع عدد یک با را بردار یک که این یعنی ،ایم به را پارامتر ما جا این در مثال ،نباشد کالس خود نوع از باید ما پارامتر بنابراین .ایم ریخته بردار در را نتیجه و ایم خواهی می صحیح عدد یک با را بردار یک که باشد می معنی بدین این .ایم گرفته نظر در صحیح عدد صورتجم مع آن که نداریم شی دیگر جا این در که تفاوت این با فقط باشد می قبل صورت به عملگر این سازی پیاده دستورا .کنیم .دهیم قرار خود دسترس در ) . ( نقطه کاتراکتر از استفاده با را = ترکیبی عملگر سربارگزاری*.)گر اشاره (همراه .هم با بردار دو ضرب برای class vector { private: float *a; int n; public: vector operator*=(vector ob1); public قسمت در عملگر سربارگزاری به مربوط تابع نوشتن }; vector vector::operator*=(vector ob1) ترکیبی عملگر سربارگزاری به مربوط متد نوشتن :اول مرحله { for (int i = 0; i < n; i++) for ی حلقه یک نوشتن :دوم مرحله { a[i] = ob1.a[i] * a[i]; ترکیب عملگر سربارگزاری :سوم مرحلهی } return *this; this گر اشاره بازگشت :چهارم مرحله } از و کرد خواهد تغییر کمی ما برنامه باشیم داشته گر اشاره برنامه در که وقتی ،کنید می مشاهده که طور همانیک ی حلقهforعملگر از استفاده با را شی دو که است قرا باال برنامه در .کنیم می استفاده اشیاء تعداد شمارش برای نیز نوع از یعنی کالس خود نوع از ما پارامتر باید بنابراین .کنیم ضرب هم در ،ضرب ترکیبیvector.باشد عدد یک بر بردار یک تقسیم برای /= عملگر سربارگزاری)گر اشاره (همراه . class polynomial { private: float *a;
68.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 68 int d; public: polynomial operator/=(int b); }: polynomial polynomial::operator/=(int b) { for (int i = 0; i < d; i++) { a[i] = a[i] / b; } return *this; } وجود گرها اشاره نیز جا این درشده فرستاده پارامتر چون .کنیم می سازی پیاده را دستورات قبل مثال مانند و دارند .کنیم تقسیم صحیح عدد یک بر را ای شی باید که فهمیم می بنابراین باشد می صحیح عدد نوع از .-7دوست تابع(friend) تا دهیم می جواب زیر سوال به ابتداطبق مثال .شود آسان ما برای موضوع فهمmain()چه باید ما ،شده داده کنیم؟ سربارگزاری را عملگرهایی int main() { vector v1, v2, v3; v3 و v2 و v1 های نام به شی سه ایجاد cin >> v1 >> v2 >> v3; cin هر دریافتورودی دستور از استفاده با شی سه v3 = v1 + 12; عدد با16 v1 بردار بعدهای تمام کردن جمع v3 = 8 + v1; v1 عدد کردن جمع6بردار بعدهای تمام با cout << v3; cout خروجی دستور از استفاده با v3 شی نمایش getch(); return 0; } قسمت در هرگاه ،که گفتیم هم قبل مطالب درmain()را ها آن که این یا شود انجام محاسباتی عملیات اشیاء روی بر ، ورودی دستور از استفاده باcinدریا کلید صفحه ازخروجی دستور از استفاده با را ها آن که این یا فتcoutدر ر عملگر همان دقیقا باید ،داد نمایش خروجیادر .کنیم سربارگزاریقسمتmain()به شی سه اول خط در ،نیز باال عملگر باید بنابراین ،شوند می گرفته کلید صفحه از شی سه این دوم خط در سپس است آمده وجودcinرا سربابردار بعدهای تمام ،سوم خط در .کنیم رگزاریv1عدد با6را جمع عملگر باید بنابراین ،است شده جمع عدد ابتدا دفعه این که تفاوت این با باشد می قبل خط به مربوط دستور همان این نیز چهارم خط در .کنیم سربارگزاری 6بردار بعدهای ی همه با را عدد این سپس است شده نوشتهv1سربار باید را عملگری چه حاال .است کرده جمع .کنید دقت زیر ی نکته به ،دوست عملگر با آشنایی و سوال این به جواب برای کرد؟ گزاری
69.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 69 نکته.-15قسمت در اگر :main()باشد شده نوشته قبل مثال چهارم خط مانند ،ضرب عملگر برای مثالاین یعنی ، را عددی ابتدا کهمورد ای شی باجمعقرار .. یاتا از باید ،عملگرها نوع این برای ،دهد.کنیم استفاده دوست بع .داد نجام را سربارگزاری دوست تابع از استفاده با باید ،نباشد کالس نوع از اول ی داده اگر بنابراین که طور همانمی داده به باید ،دوست ازتابع استفاده برای ،کنید می شاهدههمان جزء داده این اگر ،کنیم نگاه اول ،نبود کالس خود نوع از اول ی داده اگر اما .کنیم استفاده دوست تابع از نباید پس ،ایم آورده وجود به که بود اشیایی .کنیم استفاده دوست تابع از باید :نیست الزم دوست تابعv3=v1 + 14;یاv2=v3 / 6; :است الزم دوست تابعv1=12 + v2;یاcin>> v1;یاcout<< v3; نکته.-12عملگرهای سربارگزاری برای همیشه :cinوcoutدو این چون .کنیم می استفاده دوست تابع از باید :کنند می عمل زیر صورت به عملگر cin>> v1;ورودی جریان نوع از اول ی داده ،cinباشد می cout<< v1;د ،خروجی جریان نوع از اول ی ادهcout.باشد می ،نیستند کالس عضو دوعملگر این اول ی داده چون بنابرایندوست تابع صورت به را عملگر دو این باید حتما پس .کنیم سازی پیاده نکته.-17کنید دقت .باشد می استفاده قابل نیز کالس از خارج در بنابراین ،نیست کالس عضو دوست تابع :کدر ه پامتر فاقد عملوری تک عملگرهای و پارامتر یک دارای عملوندی دو عملگرهای ،قبلی عملگرهای سربارگزاری قبل حالت از تر بیش پارامتر یک ،کنیم می استفاده عملگرها سربارگزاری برای دوست تابع از که وقتی اما ،بودند یعن .داریمسربارگزاری برای که این یعملو تک عملگرهایعملگرهای سربارگزاری برای و پارامتر یک از ،ندی پارام دو از ،عملوندی دوتر.کنیم می استفاده نکته.-16کلیدی ی کلمه که است کافی فقط ،عملگرها سربارگزاری در دوست تابع از استفاده برای :friendدر را عملگر سربارگزاری برای مثال .بنویسیم عملگر سربارگزاری متد ابتدایجمع:کنیم می عمل زیر صورت به friend vector operator+(int ob1, vector ob2); نکته.-14عملگرهای سربارگزاری در :cinوcoutکاراکتر از باید ،دهی نسبت عملگر سربارگزاری همانند ، ( & ) refrence.کنیم استفادهسربارگزاری برای دفعه این اماcinسه ازrefrenceوبرایcoutدو از refrenceبرای .کنیم می استفادهcinکلیدی ی کلمه از قبل را یکیoperatorه پارامتر دو هر برای و ،یک م refrence.دهیم می قرار برای اماcoutدو ازrefrenceکلیدی ی کلمه از قبل را اولی که کنیم می استفادهoperatorوrefrenceرا بعدی سربارگزاری برای پس .نویسیم می اول پارامتر در نیزcoutبدون را دوم پارامتر ،refrence.نویسیم می نکته.-61:را عملوندی دو عملگرهای خواستیم اگر ،دوست تابع صورت به عملگرها سربازگزاری در اول ی داده نوع همان اول پارامتر :که کرد دقت باید کنیم سربارگزاری.باشد می دوم ی داده نوع همان دوم پارامتر و :زیر صورت به friend vector operator+(int ob1, vector ob2); همان با صحیح عدد نوع از اول ی داده که باشد می معنی بدین باال خطintخود نوع از دوم ی داده و باشد میکالس جمع ای شی با را عددی که صورت بدین .باشد می.ایم کرده
70.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 70 نکته.-61دید حوضه عملگر از ،دوست تابع کمک به عملگرها سربارگزاری برای :( :: )چون .کنیم نمی استفاده عملگر این از توان می توابعی برای فقط .کرد استفاده عملگر این از نباید بنابراین نیستند کالس عضو دوست توابع .باشند کالس عضو که کرد استفاده .-8سربهای عملگر ارگزاریcinوcout به مربوط ای کتابخانه فایل که گفتیم هم قبلی مطالب درcinوcout،iostreamکتابخانه فایل این باید که باشد می ابتدای به را ای.کنیم اضافه خود های برنامه ی همهعملگرcinورودی جریان نوع ازistreamعملگر وcoutاز خروجی جریان نوعcoutعملگرهای سربارگزاری برای دوست تابع در بنابراین .باشد میcinوcoutپارامتر ، نوع از همیشه اولiostreamیاostreamتعریف برای بنابراین .باشد می کالس خود نوع از دوم پارامتر و عملگرهایcinوcout:نویسیم می زیر صورت به را ها آن ،دوست تابع کمک به friend istream & operator>>(istream & I, vector & ob1); :cin سربارگزاری برای friend ostream & operator<<(ostream & O, vector ob2); :cout سربارگزاری برای عملگر سربارگزاریcin)گر اشاره (بدون :دوست تابع از استفاده با class vector { private: float x, y, z; public: friend istream & operator>>(istream & I, vector & ob1); سربارگزاری به مربوط متد نوشتن }; public قسمت در عملگر istream & operator>>(istream & I, vector & ob1) نوشت :اول مرحلهبه مربوط متد ن { cin عملگر سربارگزاری I >> ob1.x; انجام :دوم مرحلهعملیاتبه مربوطها داده دریافت I >> ob1.y; ... ... ... I >> ob1.z; ... ... ... return I; I شی بازگشت :سوم مرحله } نکته.-66:ی کلمه نباید ،" دوم قسمت " همان یا کالس سازی پیاده قسمت درکلیدیfriend.بنویسیم را اول مرحلهمی سازی پیاده را آن به مربوط ساختار ،بعد های مرحله در و نویسیم می صورت بدین را تابع ابتدا در : حوضه عملگر نوشتن به نیازی " دوم قسمت " در یعنی قسمت این در ،گفتیم قبل مطالب در که هم طور همان .کنیم دید( :: )کلیدی ی کلمه وfriendسه نیز قسمت این در .باشد نمیrefrenceیک چون نیز ما تابع و ایم داده قرار عملگر برای ،باشد می دوست تابعcinگفتیم قبل در هم را نکته این .ایم داده قرار پارامتر دو ،است عملوندی دو که عملگرهای سربارگزاری برای همیشه :کهcinوcoutپارام دو از ،استفاده ترنوع باید اول پارامتر که کنیم می جا این در که ورودی جریانiostreamیعنی کالس خود نوع از باید دوم پارامتر و باشد ،باشد میvector.باشد دوم مرحلهاز عدد یک دریافت برای قبال .بدهیم انجام را ها داده دریافت به مربوط عملیات باید مرحله این در :
71.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 71 ورودیصورت بدینعمل:کردیم میvector v1; cin>> v1; اول ی داده نوع ،بینید می باال کد در که طور همانcinورودی جریان نوع از عملگر این گفتیم هم قبال که باشد می iostreamاز دوم ی داده وعملگر پارامترهای که است همین خاطر به .باشد می کالس خود نوعcinتریب به را اولیراiostreamپارامتر مثال این در مثال .ایم کرده معرفی کالس خود نوع از را دومی وiostreamراIو را کالس خود پارامترob1عملگر جای به بنابراین ،ایم کرده گزاری نامcinیعنی آن پارامترI،شی جای به و یعنی را آن پارامترob1:زیر صورت به .نویسیم می cin>> v1; I >> v1; شی باید ،ایم کرده سربارگزاری حاال تا که دیگری عملگرهای به توجه با که کنید دقت نکته این بهob1تک تک به قسمت متغییرهایprivateبنقطه کاراکتر از استفاده ا( . ).باشد داشته دسترسی سوم مرحلهصورت به همیشه متد این بازگشتی نوع کنیدکه دقت :iostreamپارام باید بنابراین ،باشد میآن ترکهI .دهیم بازگشت را دارد نام عملگر سربارگزاریcout)گر اشاره (بدون :دوست تابع از استفاده با class vector { private: float x, y, z; public: friend ostream & operator<<(ostream & O, vector ob2); به مربوط متد نوشتن }; public :قسمت در عملگر سربارگزاری ostream & operator<<(ostream & O, vector ob2) به مربوط متد نوشتن :اول مرحله { cout عملگر سربارگزاری O << ob2.x; ها داده نمایش به مربوط عملیات انجام :دوم مرحله O << ob2.y; ... ... ... O << ob2.z; ... ... ... return O; O شی بازگشت :سوم مرحله } عملگر سربارگزاریcoutعمل سربارگزاری مانند دقیقا نیزگرcinجای به بار این که تفاوت این با فقط باشد می iostreamخروجی جریان ازostreamدو از جا این در ،گفتیم قبل در که مطالبی طبق و کنیم می استفاده refrence.کنیم می استفاده اول مرحلهحو عملگر نوشتن به نیازی قسمت این در که کنید دقت .نویسیم می را آن صورت بدبن ابتدا :دی ضهد( :: ) کلیدی ی کلمه وfriend.باشد نمی دوم مرحلهعملگر همانند نیز کار این برای .دهیم می انجام را ها داده نمایش به مربوط عملیات نیز قسمت این در : cinعملگر جای به که تفاوت این با فقط کنیم می عمل( >> )عملگر از( << ).کنیم می استفادهقسمت این در پارامترostream،Oپ و،کالس خود ارامترob2.باشد می) . ( نقطه کاراکتر از استفاده با را پارامتر شی باید و قسمت متغییرهای تک تک بهprivate.دهیم قرار خود دسترس در سوم مرحلهصورت به همیشه متد این بازگشتی نوع کنیدکه دقت :ostreamپارامتر باید بنابراین ،باشد میکه را آن O.دهیم بازگشت را دارد نام
72.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 72 عملگر سربارگزاریcin)گر اشاره (همراه :دوست تابع از استفاده با class vector { private: float *p; int n; public: friend istream & operator>>(istream & I, vector & ob1); سربارگزاری به مربوط متد نوشتن }; public :قسمت در عملگر istream & operator>> (istream & I, vector & ob1) به مربوط متد نوشتن :اول مرحله { cout عملگر سربارگزاری for (int i = 0; i < ob1.n; i++) for حلقه یک نوشتن :دوم مرحله { I >> ob1.p[i]; عملیات انجام :سوم مرحلهها داده دریافت به مربوط } return I; I شی بازگشت :چهارم مرحله } اول مرحله.نویسیم می صورت بدین را عملگر این متد ابتدا : دوم مرحلهی حلقه از ،باشیم داشته گر اشاره هروقت ،گفتیم هم قبل مطالب در که طور همان :forو کنیم می استفاده .کنیم می پیمایش را شی اخرین تا صفر از را حلقه شروع اندیس سوم مرحلهگی می قرار گر اشاره داخل در ما های داده تمام ،داریم گر اشاره وقتی که گفتیم هم قبل مطالب در :و رند .دهیم انجام گرها اشاره روی بر را عملیات این باید ،محسبات انجام برای :نداشتیم گر اشاره وقتیI>> ob1.x; اشاره وقتی:داشتیم گرfor (int i = 0; i < ob1.n; i++) { I >> ob1.p[i]; } چهارم مرحلهصورت به همیشه متد این بازگشتی نوع کنیدکه دقت :istreamرا آن پارامتر باید بنابراین ،باشد می کهI.دهیم بازگشت را دارد نام عملگر سربارگزاریcout)گر اشاره (همراه :دوست تابع از استفاده با class vector { private: float *p; int n; public: friend ostream & operator<<(ostream & O, vector ob2); به مربوط متد نوشتن }; public :قسمت در عملگر سربارگزاری ostream & operator<< (ostream & O, vector ob2) :اول مرحلهبه مربوط متد نوشتن { cout عملگر سربارگزاری for (int i = 0; i < ob2.n; i++) for حلقه یک نوشتن :دوم مرحله
73.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 73 { O << ob2.p[i]; به مربوط عملیات انجام :سوم مرحلهها داده نمایش } return O; O شی بازگشت :چهارم مرحله } عملگر مانند نیزدقیقا عملگر این که کنید دقتcinجای به که تفاوت این با شود می سربارگزاریiostreamاز خروجی جریانostreamدو از ،قسمت این در که کنید دقت .کنیم می استفادهrefrence.کنیم می استفاده بری ارث :چهارم فصل از یکی بری ارثوجود به را مبنا کالس یک توان می روش این از استفاده با که باشد می گرایی شی مهم اصول ی بقیه تا آوریم می وجود به را آن که کالسی به .ببرند ارث به را مبنا کالس های گی ویژه بعدی های کالس و آورد مبنا کالس ،ببرند ارث به آن از را خود گی ویژه ها کالسپایه کالس یا.شود می گفته .گویند می شده مشتق کالس ،برد می ارث به مبنا کالس از را خود های گی ویژه که کالسی به مشخص نیز را بری ارث این نحوه باید ،ببرد ارث به پایه یا مبنا کالس از را خود های گی ویژه خواهد می که کالسی کند.خصوصی اعضای به تواند نمی شده مشتق کالس که کنید دقت(private)باشد داشته دسترسی پایه یا مبنا کالس عمومی اعضای به تواند می فقط و(public).باشد داشته دسترسی مبنا کالس :باشد می زیر صورت به دیگر کالس از کالس یک بری ارث نحوه #include<iostream.h> #include<conio.h> class A هما کهباشد می مبنا کالس ن A نام به کالسی { private: float x; دارد x نام به خصوصی متغییری مبنا کالس public: void insert(); دارد insert نام به متدی مبنا کالس void print(); دارد print نام به متدی مبنا کالس }; class B:public A برد می ارث به A کالس از public صورت به را بری ارث نحوه که B نام به کالسی { private: شده مشتق کالس خصوصی اعضای … … …; public: شده مشتق کالس متدهای … … …; }; int main() main() تابع
74.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 74 { B ob1; B کالس نوع از ob1 نام به شی ob1.insert(); ob1شی از استفاده با مبنا کالس متدهای تمام به دسترسی ob1.print(); ... ... ... getch(); return 0; } کالس توضیحهای کالس سپس و آوریم می وجود به مبنا کالس عنوان به را کالس یک ابتدا بری ارث برای : ،ایم کرده را کار همین نیز باال مثال در .ببرند ارث به را مبنا کالس های گی ویژه تا آوریم می وجود به را دیگری کالس نام به مبنا کالس یک ابتدا که این یعنیAو باشد می متد چندین و متغییر یک داری که است آمده وجود به کالس نام به دیگری کالسBصورت به را مبنا کالس های گی ویژه که است شده سازی پیاده نیزpublicارث به .برد می ارث نحوه که وقتی .ببرد ارث به را مبنا کالس خصوصی اعضای تواند نمی شده مشتق کالس که کنید دقتبررا ی صورت بهpublicقسمت متدهای و متغییرها تمام که این یعنی کنیم می معرفیpublicهای متد به مبنا کالسقسمت publicصورت به را بری ارث نحوه واگر .شوند می اضافه شده مشتق کالسprivateمی معنی بدین کنیم معرفی قسمت متدهای و متغییرها تمام که باشدpublicم کالسبه بناقسمتیا خصوصیprivateاضافه شده مشتق کالس صورت به را بری ارث نحوه باال برنامه .شوند میpublicتمام که باشد می معنی بدین این و است کرده معرفی قسمت متدهای و متغییرهاpublicمشتق کالس بنابراین .شوند می اضافه نیز شده مشتق کالس متدهای به مبنا کالس متدهای به تواند می نیز شدهinsert()وprint().باشد داشته دسترسی نیز مثال9-1نام به کالسی :Aنام به دیگر کالسی و آورید وجود به را باشد می پایه کالس کهBکه کنید ایجاد کالس خصوصیاتAصورت به راpublic.ببرد ارث به #include<iostream.h> #include<conio.h> class A A نام به کالسی ایجاد { private: float x, y; مبنا کالس خصوصی متغییرهای public: void insert(); مبنا کالس متدهای void print(); ... ... ... }; void A::insert() insert() متد سازی پیاده { cout << "enter x,y: "; cin >> x >> y; } void A::print() print() متد سارزی پیاده { cout << "x: " << x << endl; cout << "y: " << y;
75.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 75 } class B:public A برد می ارث به public صورت به را A کالس های گی ویژه که B نام به کالسی ایجاد private: float z; شده مشتق کالس خصوصی متغییرهای public: void inpute(); مبنا کالس متدهای }; int main() main() تابع { B ob1; B همان یا شده مشتق کالس از ob1 نام به ای شی ایجاد ob1.insert(); باشد داشته دسترسی مبنا کالس public متدهای تمام به تواند می ob1 شی ob1.print(); ... ... ... getch(); return 0; } کالس توضیحنام به کالسی ابتدا در :Aکالس این که کنیم می سازی پیادههای نام به متغییر دو دارایxوyمی متد دو دارای چنین هم و باشد،نام بهinsert()متد و ها داده دریافت برایprint().باشد می ها داده نمایش برای نام به دیگری کالسBپیکالس های گی ویژه که کنیم می سازی ادهAصورت به راpublic.برد می ارث به کالس بنابراینAکالس و مبنا کالس یکBد .باشد می شده مشتق کالس یکرمشتق کالس که گفتیم هم قبل مطالب یا خصوصی اعضای به تواند نمی وجه هیچ به شدهprivateجا این در که وقتی .باشد داشته دسترسی مبنا کالس صورت به را بری ارث نحوهpublicقسمت متدهای تمام که باشد می معنی بدین ایم کرده معرفیpublicمبنا کالس متدهای بهpublicمتدهای و متغییرها تمام به تواند می شده مشتق کالس بنابراین .شوند می اضافه شده مشتق کالس قسمتpublic.باشد داشته دسترسی مبنا کالس 9-1دسترسی نحوهprotected دسترسی نحوه دانیم می که طور همانprivateدسترسی نحوه و خصوصی صورت بهpublicعمومی صورت به تابع در بنابراین .باشد میmain()قسمت متغییرهای بهprivateبه اما ،کرد پیدا دسترسی توان نمیمتغییرهاو متدهایقسمتpublic.داشت دسترسی توان می نحوه یک ،نوع دو این بر عالوهنام به دیگر دسترسیprotectedاستفاده مورد ها کالس در تر بیش که دارد وجود هم تقریبا یعنی ،باشد می عمومی کامل طور به نه و خصوصی کامل طور به نه ،دسترسی نحوه این .گیرد می قرار های گی ویژهprivateوpublic.باشد می دارا حدودی تا را نکته9-1:صورت به که عضویprotectedداخل در تواند نمی ،شود می معرفیmain()قرار استفاده مورد مور شده مشتق کالس داخل در میتواند عضو این اما بگیردخ زیر مثال .بگیرد قرار استفاده دسه این از ای الصه بیان را دسترسی نحوه.کند می مثال9-6صحیح نحوه و مشخص را باشد می اشکال دارای که برنامه از هرقسمتی ،زیر های کالس به توجه با : .بنویسید را آن نوشتن
76.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 76 #include<iostream.h> #include<conio.h> #include<stdlib.h> class A A نام به کالسی نوشتن { private: float x, y, z; پایه کالس خصوصی متغییرهای protected: float n; پایه کالس protected متغییرهای public: void inpute(); پایه کالس متدهای void calculate(); ... ... ... void print1(); ... ... ... }; void A::inpute() inpute متد سازی پیاده { cout << "enter x,y: "; cin >> x >> y; } void A::calculate() calculate متد سازی پیاده { z = x*x + y*y; } void A::print1() print متد سازی پیاده1 { cout << x << " " << n << " " << a << " " << w << endl; // خطا1 } class B:public A مبنا کالس ازبرد می ارث public کهصورت به B نام به کالسی ایجاد { private: float a, b, c; شده مشتق کالس خصوصی متغییرهای protected: float w; شده مشتق کالس protected متغییرهای public: void set(float a1, float b1, float c1); شده مشتق کالس متدهای void print2(); ...... ... }; void B::set(float a1, float b1, float c1) set متد سازی پیاده { if (a1 || b1 || c1 < 0)
77.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 77 { cout << "Erorr!"; exit(1); } a = a1; b = b1; c = c1; } void B::print2() print2 متد سازی پیاده { cout << x << " " << n << " " << a << " " << w << endl; // خطا6 } int main() main() تابع { A ob1; مبنا کالس نوع از ob1 نام به ای شی ایجاد B ob2; شده مشتق کالس نوع از ob2 نام به ای شی ایجاد ob1.x = 3; // خطا. ob1.n = 15; // خطا9 ob1.inpute(); ob1.a = 12; // خطا5 ob1.w = 24; // خطا2 ob1.set(15, 8, 12); // خطا7 ob2.x = 15; // خطا6 ob2.n = 18; // خطا4 ob2.inpute(); ob2.a = 19; // خطا11 ob2.w = 38; // خطا11 ob2.set(4, 8, 12); getch(); return 0; } کالس توضیح:که مبنا کالس اولی .است آمده وجود به کالس دو باال برنامه درAشده مشتق کالس دومی و دارد نام کهB.دارد نامصورت به مبنا کالس از را خود های گی ویژه ،شده مشتق کالسpublicی ،برد می ارث بهاین عنی قسمت به مبنا کالس در موجود متدهای ی همه کهpublicمی شده مشتق کالس و شوند می اضافه شده مشتق کالس م که هم طور همان برنامه این در .کند استفاده متدها این از تواند،کنید می شاهده11بررسی به که دارد وجود خطا .نویسیم می را آن صحیح نحوه و پردازیم می ها آن از هرکدام خطا1:متغییر خط این درمتد به مربوط کهprint1متد .دارد برعهده را اعداد چاپ وظبفه و باشد میprint1که یا مبنا کالس عضوAبنابرای ،باشد مینمی باشد کالس عضو که متدی ،گفتیم قبل در که مطالبی طبقداد تواندهای ه قسمتprivateوprotectedمتغییرهای نوشتن بنابراین .دهد قرار خود استفاده مورد راxوnهیچ متد این در
78.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 78 های متغییر به مربوط برنامه خطای اما .آورد نمی وجود به را مشکلیaوwمتغییر .باشد میaو خصوصی عضو متغییرwعضوprotectedکالسB،کالس یک خصوصی عضوهای ،گفتیم قبل در که هم طور همان .باشد می فقطم دسترسی قابل کالس همان داخل دریاستفاده بنابراین ،نداریم را ها آن از استفاده حق کالس از خارج و باشند کالس داخل در متغییر این ازAو باشد می اشتباهکالس داخل در را متغییر این از استفاده حق فقطB.داریم را متغییرwعضو که همprotectedکالسBو باشد میعضوهایprotectedدا در فقطقابل شده مشتق کالس خل متد داخل در بنابراین .مبنا کالس داخل در نه باشند می دسترسیprint1متغییرهای از استفاده حق فقطxوnرا .داریم خطا6متد :print2یا شده مشتق کالس عضوBرا دیگری کالس خصوصی اعضای توانیم نمی بنابراین باشد می متغییر بنابراین ،دهیم قرار استفاده مورد متد این درxعضوخصوصیکالس در را آن نباید و باشد می مبنا کالس متغییر .داد قرار استفاده مورد دیگریnعضو کهprotectedشده مشتق کالس در تواند می باشد می مبنا کالس متغییر از استفاده بنابراین بگیرد قرار استفاده موردnمتغییر .آورد نمی پیش را مشکلی هیچ قسمت این درaکه متغییر و کالس خود خصوصی عضوwعضو که همprotectedرا ها آن از استفاده حق بنابراین باشد می کالس ا درمتغییر از استفاده حق فقط پس .داریم نیز متد ینx.باشد می مبنا کالس خصوصی عضو چون ،نداریم را خطا.:شیob1کالس از راAو بهاست آمده جودمتغییر شی این .xمی که طور همان .است کرده دهی مقدار را قسمت متغییرهای ،دانیدprivateتابع در استفاده حق وجه هیچ بهmain()می اشتباه دستور این بنابراین .ندارند را .باشد خطا9شی :ob1متغییر ،nعضو که راprotectedنیز دستور این .است کرده دهی مقدار باشد می مبنا کالس عضوهای چون ،باشد می اشتباهprotectedتابع داخل در وجه هیچ بهmain().بیایند توانند نمی خطا5متغییر :aهکه هم طور باشد.همان می شده مشتق کالس خصوصی عضو که م،دانیم میعضوهایخصوصی درتابع توانند نمیmain()بیایندتابع در تواند نمی هم متغییر این بنابراینmain().باشد داشته حضور خطا2متغییر :wعضوprotectedاشتباه نیز دستور این بنابراین ،باشد می شده مشتق کالس.باشد می خطا7متد :set()متدهای عضوpublicمشتق کالس توسط که ای شی با فقط بنابراین ،باشد می شده مشتق کالس یا شدهBتابع در متد این از توان می آید می وجود بهmain()این در اما .کرد استفادهکه ای شی از استفاده با جا یا مبنا کالس توسطA.باشد می اشتباه نیز دستور این بنابراین ،یگرد می قرار استفاده مورد ،است شده ایجاد خطا6شی :ob2کالس ازBمتغییر شی این .است آمده وجود بهxمتغییر چون و .است کرده دهی مقدار راxنیز م خصوصی عضو یکتابع درداخل متغییر این از توانیم نمی بنابراین ،باشد یmain()کنیم استفادهنیز دستور این . .کرد خواهد اشکال دچار را برنامه و باشد می اشتباه خطا4متغییر :nعضوprotectedمبنا کالسعضوهای که گفتیم هم قبل در و باشد میprotectedوجه هیچ به تابع درmain().باشد می اشتباه نیز دستور این بنابراین ،آیند نمی خطا11:مت چونغییرaتابع در را آن توان نمی بنابراین ،باشد می خصوصی عضو یکmain().آورد خطا11متغییر :wعضو یک نیزprotectedعضوهای چون بنابراین ،باشد میprotectedتابع در توانند نمی main().باشد می اشتباه نیز دستور این بنابراین ،باشند داشته حضور
79.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 79 9-6مخرب و ها سازندهبری ارث در ها یاد نیز را ها آن از استفاده و سازی پیاده نحوه و شدیم آشنا کامل طور به ها مخرب و ها سازنده با قبل های فصل در ارث در نیز ها مخرب و ها سازنده .گرفتیمبریمورد توانند می.بگیرند قرار استفاده ،شود می ایجاد شده مشتق کالس نوع از ای شی که زمانیکالس سازنده متد ،شده مشتق کالس سازنده متد بر عالوه متد فراخوانی بر عالوه ،رود می بین از شده مشتق کالس نوع از ای شی که زمانی و شود می زده صدا نیز مبنا مشتق کالس مخربشده.شود می زده صدا نیز مبنا کالس مخرب متد ، برای که باشد می صورت بدین نیز ها فراخوانی ترتیبابتدا :سازنده متد فراخوانیمتدسپس و مبنا کالس سازندهمتد متد ابتدا که این یعنی ،باشد می برعکس :مخرب متد فراخوانی برای اما شود می فرخوانی شده مشتق کالس سازنده سپس و شده مشتق کالس مخرب.شود می فراخوانی مبنا کالس مخرب متد ساز از شده مشتق کالس در بخواهیم اگر" پارامتر کردن رد " تکنیک از استفاده با ،کنیم استفاده دار پارامتر های نده :زیر دستور مانند .کرد ارسال مبنا کالس به را پارامترها این توان می #include<iostream.h> #include<conio.h> class A { private: float a; public: A(float x1); x1 پارامتر با A کالس سازنده متد ~A(); A کالس مخرب متد }; A::A(float x1) A کالس سازنده متد سازی پیاده { a = x1; cout << "call A constructor" << endl; } A::~A() A کالس مخرب متد سازی پیاده { cout << "call A destructor" << endl; } class B :public A برد می ارث A کالس از public صورت به که B کالس { private: float b; public: B(float x2); x2 پارامتر با B کالس سازنده متد ~B(); B کالس مخرب متد }; B::B(float x2) :A(x2) B کالس سازنده متد سازی پیاده
80.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 80 { b = x2; cout << "call B constructor" << endl; } B::~B() B کالس مخرب متد سازی پیاده { cout << "call B destructor" << endl; } int main() main() تابع { B ob2(12); B کالس نوع از ob2 نام به ای سازنده ایجاد getch(); return 0; } کالس توضیح:نام به مبنا کالس یک باال برنامه درAیک ونام به شده مشتق کالسBاین از کدام هر .دارد وجود دار پارامتر سازنده اگر ،گفتیم قبل در که هم طور همان .باشند می مخرب متد یک و سازنده متد یک دارای کالس دو مبنا کالس برای را شده مشتق کالس های پارامتر ،" پارامتر کردن رد " ترفند صورت به باید ،داشتیم برنامه در ای از استفاده برای .بفرستیمنمی عمل زیر صورت به " دوم قسمت " همان یا متدها سازی پیاده قسمت در ،ترفند :کنیم B::B(float x2) :A(x2) کاراکتر ،درادامه که تفاوت این با فقط کنیم می عمل قبل صورت به دقیقا ،سازنده متد نوشتن برای( : )نویسیم می را سپس وپارامتر همان باید را آن داخل پارامتر و و مبنا کالس نام.بفرستیم مبنا کالس برای است قرار که بنویسیم ی دستور ادامه در که کنید دقت پس:A(x2)باید حتما پس .باشد می شده اضافه سازنده بهدرکالس سازندهA،همان کالس سازنده پارامتر یعنی ،شود فرستاده مبنا کالس به است قرار که بدهیم قرار را پارامتریBداخل در باید را کالس سازندهA.بنویسیم 9-.مجازی توابع ،خواهیم می ما که آید می پیش شرایطی اوقات گاهیرا جدیدی تعریف ،است شده تعریف مبنا کالس در که را متدی متد داخل در باید ،دارد پارامتر تعداد هر به مبنا کالس متد که کنید دقت .باشیم داشته آن از نیز شده مشتق کالس در نیز شده مشتقبا پارامترها همانکن می استفاده مجازی متد از مواردی چنین در .بنویسیم را نام همان.یم ی کلمه ،متد معرفی از قبل مبنا کالس در که است کافی ،کنیم معرفی مجازی متد ،صورت به را متد یک که این برای کلیدیvirtual.بدهیم قرار راپیاده دیگر صورتی به را مجازی متد تواند می شده مشتق کالس ،صورت این در که صورت به مبنا کالس در را متد یک اگر اما .کند سازی،شده مشتق کالس داخل در اما ،کردیم معرفی مجازی متد ،دارد وجود مبنا کالس در که تعریفی همان از متد این بنابراین ،نکردیم سازی پیاده را آن دستوراتک می استفاده.ند :زیر صورت به #include<iostream.h> #include<conio.h>
81.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 81 class A A همان یا مبنا کالس { private: int x; public: virtual void show(); مجازی متد یک }; void A::show() مجازی متد سازی پیاده { cout << "class A"; } class B :public A می ارثبرد A کالس از public صورت به که B کالس { private: int y; public: void show(); }; void B::show() شده مشتق کالس داخل در مجازی ازمتد جدیدی تعریفی { cout << "class B"; } int main() { B ob2; B کالس نوع از ob2 نام به شی یک ایجاد ob2.show(); getch(); return 0; } کالس توضیحنام به مبنا کالس یک باال برنامه در :Aنام به شده مشتق کالس یک وBکالس داخل در .دارد وجود نام به متد یک مبناshow()" پیغام چاپ وظیه که دارد وجودclass Aی کلمه از متد این از قبل .دارد عهده بر را " کلیدیvirtualمتد که است معنی بدین این ،است شده استفادهshow()کالس بنابراین .باشد می مجازی متد یک متد برای شده مشتق متد داخل در .باشد داشته خود داخل در را متد این از جدیدی تعریف تواند می شده مشتق show()" پیغام ،class Bداخل در بنابراین .است شده نوشته "main()شی کهob2متد بهshow()،دارد دسترسی " پیغام خروجی درclass B.شود می چاپ " 9-9محض مجازی متد
82.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 82 اراعه را مبنا کالس مجازی متد از جدیدی تعریف تواند می شده مشتق کالس مجازی متد ،گفتیم قبل در که طور همان و ندهدحتما که بدهد دستور شده مشتق کالس به مبنا کالس اگر اما .کند استفاده مبنا کالس فرض پیش تعریف همان از محض مجازی متد از ،نکند استفاده مبنا کالس فرض پیش تعریف از و باشد داشته را متد این از جدیدی تعریف باید ا :کنیم می استفاده صورت بدینبمتد از تعریفی هیچ باید تدارا آن و باشیم نداشته مبنا کالس داخل در را مجازی :زیر صورت به .دهیم قرار صفر با مساوی #include<iostream.h> #include<conio.h> class A A یا مبنا کالسهمان { private: int x; public: void insert(); virtual void show() = 0; محض مجازی متد یک }; class B :public A برد می ارث A کالس از public صورت به که B کالس { private: int y; public: void show(); }; void B::show() سا پیادهمحض مجازی متد زی { cout << "class B"; } int main() { B ob2; B کالس نوع از ob2 نام به شی یک ایجاد ob2.show(); getch(); return 0; } کالس توضیحنام به مبنا کالس یک باال برنامه در :Aنام به شده مشتق کالس یک وBکالس داخل در .دارد وجود نام به متد یک مبناshow()مجازی متد یک ،متد این بنابراین .است شده داده قرار صفر با مساوی که دارد وجود متد این از جدید تعریف یک باید حتما شده مشتق کالس و باشد می محضباشد داشته رامجازی متد یک اگر بنابراین . محض مجازی متد یک ،متد آن که گیریم می نتیجه ،شد داده قرا صفر با مساوی و داشت وجود مبنا کالس داخل در .باشیم اشته را متد این از جدید تعریف یک باید حتما بنابراین .باشد می
83.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 83 ک ،باشد داشته محض مجازی متد یک حداقل که کالسی بهانتزاعی یا تجریدی الس(abstract)کالس .شود می گفته Aد محض مجازی متد یک چون ،قبل مثالاکالس بنابراین ،ردA.باشد می انتزاعی یا تجریدی کالس یک 9-5ها تفاوتتوابع سربارگزاری با مجازی متد ی 1-متفاوت ها آن نوع و پارامترها تعداد باید حتما توابع سربارگزاری درتعداد مجازی متدهای در که حالی در باشد .باشد می یکسان پارامترها نوع و پارامترها 6-کرد سربارگزاری را نیست کالس عضو که تابعی توان می ،توابع سربارگزاری دربرای که حالی در .باشد کالس عضو حتما باید تابع ،مجازی متدهای سربارگزاری .-س توان می ،توابع سربارگزاری دراز استفاده که حالی در .کرد سربارگزاری مختلفی های فرم به را کالس ارنده .باشد می معنی بی ها سازنده سربارگزاری برای مجازی متد 9-2چندگانه بری ارث معرفی شده مشتق کالس یک را دومی و مبنا کالس یک را اولی که آوردیم وجود به کالس دو ما قبل های مثال در کالس و کردیمکال از دومیب ارث .برد می ارث به را خود های گی ویژه اولی سباشد می صورت بدین چندگانه ری کهباشد مبنا کالس چندین دارای و ببرد ارث به کالس چندین از را خود های گی ویژه شده مشتق کالس. .باشد می سازی پیاده قابل صورت دو به چندگانه بری ارث 1-مست غیر چندگانه بری ارثقیمکالس مثال که باشد می صورت بدین بری ارث نوع این :Bکالس ازAمی ارث کالس و بردCکالس از نیزBکالس که گفت توان می بنابراین .برد می ارثCکالس های گی ویژه همBبه را مستقیم صورتکالس های گی ویژه هم وAرابرد می ارث به مستقیم غیر صورت به.صورت به کالس این شکل :ایم کرده سازی پیاده زیر در نیز را آن کدهای و باشد می زیر
84.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 84 class A { … … …; } class B :public A { … … …; } class C :public B { … … …; } 6-مستقیم چندگانه بری ارث:ایبد بری ارث نوع نمثال که باشد می صورت ینکالسیکالس نام به مبناAوجود های نام به کالس دو زمان هم و داردBوCبه کالس یک هم سر آخر در و برند می ارث آن از کالس دو از بیش یا کالس نامDکالس ازBوCکالس خصوصیات بنابراین .برد می ارثAکالس در همBکالس در هم وCوجود کالس نتیجه در ،داردDاز هم کهکالسBکالس از هم وCکالس خصوصیات ناچار به ،برد می ارثAبار دو را به مجازی مبنای کالس از ما مشکل این رفع برای و شد خواهد اشکال دچار ما برنامه بنابراین .برد می ارث به :کنیم می استفاده زیر صورت
85.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 85 class A { … … … ; } class B : virtual public A { … … … ; } class C : virtual public A { … … … ; } class D : virtual public B, public C { … … … ; } امتحانی سواالت نمونه 1-.دهید توضیح کد از استفاده با چیست؟ مجازی مبنای کالس از استفاده لزوم کالس نام به مبنا کالسی اگرAهای نام به کالس دو زمان هم و باشد داشته وجودBوCآن از کالس دو از بیش یا کالس نام به کالس یک هم سر آخر در و ببرند ارثDکالس ازBوCکالس خصوصیات نتیجه در ،ببردAدر هم کالسBکالس در هم وCکالس پس ،دارد وجودDکالس از هم کهBکالس از هم وCناچار به ،برد می ارث کالس خصوصیاتAما مشکل این رفع برای و شد خواهد اشکال دچار ما برنامه بنابراین .برد می ارث به بار دو را :کنیم می استفاده زیر صورت به مجازی مبنای کالس از class A { … … … ; } class B : virtual public A { … … … ; } class C : virtual public A {
86.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 86 … … … ; } class D : virtual public B, public C { … … … ; } 6-به توجه با .است شده گرفته نظر در بعدی سه فضای در بردارها با کار برای زیر کالسmain()،شده داده .کنید سازی پیاده را الزم متدهای #include<iostream.h> #include<conio.h> #include<math.h> class vector { private: float x, y, z; public: ... ... ...; ... ... ...; }; int main() { vector a(2, 5, 9); پارامتری سه سازنده vector b, c; پارامتر بدون سازنده cin >> b; cin عملگر سربارگزاری c = a++; افزایشی عملگر سربارگزاری cout << c; cout عملگر سربارگزاری if (a < b) ای مقایسه عملگر سربارگزاری { c = b - a; تفریق عملگر سربارگزاری cout << c; cout عملگر سربارگزاری } getch(); return 0; } :شود می سازی پیاده زیر صورت به باال کالس #include<iostream.h> #include<conio.h>
87.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 87 #include<math.h> class vector { private: float x, y, z; public: vector(float x1, float y1, float z1); پارامتری سه سازنده متد vector(); پارامتر بدون سازنده متد friend istream & operator>>(istream & I, vector & r); cin عملگر سربارگزاری friend ostream & operator<<(ostream & O, vector rp); cout عملگر سربارگزاری vector operator++(int n); افزایشی عملگر سربارگزاری int operator<(vector rop; ای مقایسه عملگر سربارگزاری vector operator-(vector rp2); تفریق عملگر سربارگزاری int calculate(); محاسبه تابع }; vector::vector() پارامتر بدون سازنده متد سازی پیاده { x = 0; y = 0; z = 0; } vector::vector(float x1, float y1, float z1) پارامتری سه سازنده متد سازی پیاده { x = x1; y = y1; z = z1; } istream & operator>>(istream & I, vector & rop) cin عملگر سازی پیاده { I >> rop.x; I >> rop.z; I >> rop.y; return I; } ostream & operator<<(ostream & O, vector rp) cout عملگر سازی پیاده { O << rp.x; O << rp.z; O << rp.y; return O; }
88.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 88 vector vector::operator++(int n) افزایشی عملگر سازی پیاده { vector r; r.x = x; r.y = y; r.z = z; x = x + 1; y = y + 1; z = z + 1; return r; } int vector::calculate() محاسبه متد سازی پیاده { float s; s = (x*x) + (y*y) + (z*z); return sqrt(s); } int vector::operator<(vector rop) ای مقایسه عملگر سازی پیاده { if (calculate() < rop.calculate()) return 1; return 0; } vector vector::operator-(vector rp2) تفریق عملگر سازی پیاده { vector t; t.x = rp2.x + x; t.y = rp2.y + y; t.z = rp2.z + z; return t; } int main() main() تابع { vector a(2, 5, 9); vector b, c; cin >> b; c = a++; cout << c; if (a < b) { c = b - a;
89.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 89 cout << c; } cin.get(); cin.get(); return 0; } تابع به باید ما جا این در : کالس توضیحmain()گرفته قرار محاسباتی عملیات مورد که را ای شی هر و کنیم نگاه را بکنیم سربارگزاری باید که عملگرهایی ،کنید می مشاهده باال در که هم طور کنیم.همان سربارگزاری را است :از اند عبارت عملگرها این .ایم کرده مشخص1-عملگرcin6-عملگرcout.-ای مقایسه عملگر.-عملگر تفریق9-.افزایشی عملگر این بر عالوه9قسمت در ،کنیم سربارگزاری را هاذ آن ترتیب به باید که عملگرmain()های نام به شی سهaوb وcشی که دارد وجودaبنابراین ،باشد می پارامتر سه دارایaهای شی .باشد می پارامتری سه سازندهbوcنیز .باشند می پارامتر بدون های سازنده نیز ها این بنابراین ،ندارند پارامتری هیچ قسمت در که کنید دقتprivateرا ها عملگر این تمامی باید ما بنابراین ،ندارد وجود گر اشارهدر که روشی با این تک تک .کنیم سازی پیاده را داشتیم برنامه در گر اشاره نبود در قبل مطالبمطالب در را ها سارنده و ها عملگر داشته قبل در کدام هر از که تعریفی به توجه با و باشد نمی ها آن توضیح به نیازی پس ایم کرده سربارگزاری قبلی .کنیم می سازی پیاده را ها آن ،ایم .-به توجه با .است شده گرفته نظر در ها ای جمله چند با کار برای زیر کالسmain()دادهرا الزم متدهای ،شده آن مقدار فرض پیش طور به باشد نشده مشخص ای جمله چند ی درجه ،شی ایجاد زمان در چه چنان .کنید سازی پیاده .باشد می صفر آغاز در نیز ای جمله چند ضرایب .بگیرد نظر در صفر را #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<math.h> class polynomial { private: double *a; int d; public: ... ... ...; ... ... ...; } int main() { polynomial ob1(7), ob2(4); polynomial ob3; int k = 1;
90.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 90 cin >> ob1 >> ob2; ob3 = ob2 + ob1; cout << ob3; while (k > 0) { polynomial ob4 = ob1; cin >> k; } cout << ob1; getch(); return 0; } :شود می سازی پیاده زیر صورت به باال کالس #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<math.h> class polynomial { private: double *a; int d; public: polynomial(); پارامتر بدون سازنده متد polynomial(int n); پارامتر تک سازنده متد polynomial(const polynomial & ob); سازن متدکپی ده polynomial operator+(polynomial rp); جمع عملگر سربارگزاری polynomial & operator=(polynomial & p); دهی نسبت عملگر سربارگزاری friend istream & operator>>(istream & I, polynomial & rop); cin عملگر سربارگزاری friend ostream & operator<<(ostream & O, polynomial rop2); cout عملگر سربارگزاری }; polynomial::polynomial() پارامتر بدون سازنده متد سازی پیاده { d = 0; } Polynomial & polynomial::operator=(polynomial & p) دهی نسبت عملگر سازی پیاده { if (d != p.d) { delete[]a;
91.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 91 a = new double[p.d]; } if (!a) { cout << "Erorr!"; exit(1); } d = p.d; for (int i = 0; i < p.d; i++) { a[i] = p.a[i]; } return *this; } polynomial::polynomial(int n) پارامتری تک سازنده متد سازی پیاده { a = new double[n + 1]; if (!a) { cout << "Error!"; exit(1); } d = n; for (int i = 0; i <= n; i++) { a[i] = 0; } } polynomial::polynomial(const polynomial & ob) کپی سازنده متد سازی پیاده { a = new double[ob.d + 1]; if (!a) { cout << "Error!"; exit(1); } d = ob.d; for (int i = 0; i <= d; i++) { a[i] = ob.a[i]; }
92.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 92 } polynomial polynomial::operator+(polynomial rp) جمع عملگر سازی پیاده { polynomial r(rp.d); if (d != rp.d) { cout << "Erorr!"; exit(1); } for (int i = 0; i <= d; i++) { rp.a[i] = a[i] + rp.a[i]; } return r; } ostream & operator<< (ostream & O, polynomial rop2) cout عملگر سازی پیاده { for (int i = 0; i <= rop2.d; i++) { O << rop2.a[i]; } return O; } istream & operator>> (istream & I, polynomial & rop) cin عملگر سازی پیاده { for (int i = 0; i <= rop.d; i++) { I >> rop.a[i]; } return I; } int main() { polynomial ob1(7), ob2(4); polynomial ob3; int k = 1; cin >> ob1 >> ob2; ob3 = ob2 + ob1; cout << ob3; while (k > 0) {
93.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 93 polynomial ob4 = ob1; cin >> k; } cout << ob1; cin.get(); cin.get(); return 0; } تابع نیز قسمت این در ،کنید می مشاهده که طور همان : کالس توضیحmain()شده خواسته ما از و اند داده ما به را سا پیاده را متدها کهکه ببینیم باید فقط و فقط ،کنیم توجه کالس اسم به نباید اصال ما که کنید دقت نکته این به .کنیم زی قسمت درmain()قسمت در که این به توجه با و است شده گرفته قرار استفاده مورد عملگرهایی و متدها چه main()سازی پیاده تک به تک را متدها باید نه یا دارد وجود گر اشاره.کنیمقسمت درmain()شیob1شی و ob2هرکدام به مربوط کدهای ید با و باشند می پارامتری تک سازنده دو هر بنابراین ،باشند می پارامتر یک دارای قسمت در .کنیم سازی پیاده را دادیم قرار یررسی مورد سوم فصل در که راprivateبنابراین ،دارد وجود گر اشاره عمل ی همه بایددقت خوب نکته این به .کنیم سازی پیاده را دارد وجود گر اشاره برنامه در که این به توجه با را گرها را عملگر همان دقیقا باید ،بگیرد صورت اشیاء روی بر محاسباتی عملیات وقتی که گفتیم هم قبل در ما که کنید تابع در ،کنیم سربارگزاریmain()نام به متغییر یکkعد نوع ازعملگر این روی بر از که دارد وجود صحیح د که کنید دقت اما ،است شده گرفته صورت محاسباتی عملیات نیرkمحاسباتی هر پس ،شی نه باشد می متغییر یک فقط نه باشد می اشیاء برای فقط سربارگزاری عملیات .کنیم سربارگزاری را آن نباید بگیرد صورت آن روی بر که .متغییرها
94.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 94 مطالب فهرست نویسی برنامه بر ای مقدمه :اول فصل........................................................6 1-1شرطی دستورات و تکرار های حلقه.................................................................. 1-6ها آرایه.................................................................................................6 1-.تابع......................................................................................................4 1-9گرها اشاره............................................................................................11 اشیاء و کالسها :دوم فصل........................................................................11 6-1ها مخرب و ها سازنده...............................................................................66 6-6گرها اشاره............................................................................................62 6-.کپی سازنده متد.......................................................................................66 عملگرها سربارگزاری :سوم فصل...........................................................96 .-1عملگرها سربارگزاریتقسیم و ضرب و تفریق و جمع ی........................................5. .-6قرینه عملگر سربارگزاری..........................................................................55 .-.کاهشی و افزایشی عملگرهای سربارگزاری.......................................................57 .-4ای مقایسه عملگرهای سربارگزاری................................................................21 .-5دهی نسبت عملگر سربارگزاری....................................................................2. .-6ترکیبی عملگرهای گزاری سربار...................................................................25 .-7دوست تابع(friend).................................................................................26 .-8های عملگر سربارگزاریcinوcout............................................................71 بری ارث :چهارم فصل............................................................................7. 9-1دسترسی نحوهprotected.........................................................................75 9-6بری ارث در ها مخرب و ها سازنده...............................................................74 9-.مجازی توابع..........................................................................................61 9-9محض مجازی متد....................................................................................61 9-5توابع سربارگزاری با مجازی متد های تفاوت.....................................................6. 9-2چندگانه بری ارث....................................................................................6. امتحانی سواالت نمونه.............................................................................65
95.
C++ پیشرفته نویسی
برنامه آ دانشگاهکرمانشاه واحد اسالمی زاد Page | 95
Download