SlideShare a Scribd company logo
C++ ‫پیشرفته‬ ‫نویسی‬ ‫برنامه‬
‫آ‬ ‫دانشگاه‬‫کرمانشاه‬ ‫واحد‬ ‫اسالمی‬ ‫زاد‬
Page | 1
‫م‬‫ی‬‫ح‬‫الر‬‫من‬‫ح‬‫الر‬‫هللا‬‫م‬‫س‬‫ب‬
:‫درس‬ ‫جزوه‬
‫نویسی‬ ‫برنامه‬‫پیشرفته‬
‫زاده‬ ‫نظری‬ ‫علی‬ : ‫نویسنده‬
‫کرمانشاه‬ ‫واحد‬ ‫اسالمی‬ ‫آزاد‬ ‫دانشگاه‬
‫سال‬ ‫ماه‬ ‫بهمن‬4913
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‫نمای‬ ‫برای‬‫ش‬.‫کنیم‬ ‫می‬ ‫استفاده‬ ‫ها‬ ‫داده‬
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
}
;... ......
{
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)
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‫دارد‬ ‫را‬:‫شود‬ ‫می‬ ‫نوشته‬ ‫زیر‬ ‫صورت‬ ‫به‬ ‫که‬
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; ‫صورت‬ ‫این‬ ‫غیر‬ ‫در‬
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.‫بده‬ ‫انجام‬ ‫را‬
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‫از‬ ‫را‬ ‫هرکدام‬ ‫نمره‬ ‫و‬ ‫نام‬ ‫ترتیب‬ ‫به‬ ‫که‬ ‫دارد‬ ‫دانشجویان‬ ‫های‬ ‫نمره‬ ‫ذخیره‬ ‫برای‬
‫دریافت‬ ‫ورودی‬‫را‬ ‫ها‬ ‫آن‬ ‫و‬ ‫کند‬ ‫می‬.‫دهد‬ ‫می‬ ‫نشان‬ ‫خروجی‬ ‫در‬
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)
{
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;
‫استفاده‬ ‫گرها‬ ‫اشاره‬ ‫از‬‫اشاره‬ ‫ی‬ ‫وسیله‬ ‫به‬ ‫پویا‬ ‫های‬ ‫آرایه‬ ‫از‬ ‫استفاده‬ ،‫ها‬ ‫آن‬ ‫ترین‬ ‫مهم‬ ‫از‬ ‫یکی‬ ‫که‬ ‫شود‬ ‫می‬ ‫زیادی‬ ‫های‬
.‫گفت‬ ‫خواهیم‬ ‫بعدی‬ ‫فصل‬ ‫در‬ ‫را‬ ‫آن‬ ‫از‬ ‫استفاده‬ ‫نحوه‬ ‫که‬ ‫باشد‬ ‫می‬ ‫گرها‬
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 ‫پنجم‬ ‫خط‬‫کلیدی‬ ‫کلمه‬ :
‫اول‬ ‫;متغییر‬ ‫ششم‬ ‫خط‬‫متغییرها‬ ‫معرفی‬ :
‫دوم‬ ‫;متغییر‬ ... ... ...
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‫تابع‬ ‫این‬ ‫در‬ ‫همیشه‬ ‫که‬ .‫دهد‬ ‫بازگشت‬ ‫را‬ ‫مقدار‬ ‫یک‬ ‫باید‬ ‫بنابراین‬ ،‫باشد‬ ‫می‬
.‫شود‬ ‫داده‬ ‫بازگشت‬ ‫صفر‬ ‫مقدار‬ ‫باید‬
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;
}
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()‫تابع‬ ‫و‬ ‫عدد‬ ‫دریافت‬ ‫وظیفه‬
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‫طراحی‬ ‫کالسی‬ :‫کرده‬ ‫دریافت‬ ‫ورودی‬ ‫از‬ ‫را‬ ‫مستطیلی‬ ‫عرض‬ ‫و‬ ‫طول‬ ‫که‬ ‫کنید‬‫را‬ ‫آن‬ ‫مساحت‬ ‫و‬ ‫محیط‬ ‫و‬
.‫دهد‬ ‫نمایش‬ ‫خروجی‬ ‫در‬ ‫و‬ ‫کند‬ ‫محاسبه‬
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() ‫سا‬ ‫پیاده‬‫متد‬ ‫زی‬
{
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.‫داریم‬ ‫نیاز‬ ‫متد‬ ‫سه‬ ‫به‬ ‫ما‬ ‫برنامه‬ ‫این‬ ‫در‬ ‫بنابراین‬ .‫دهد‬ ‫نمایش‬ ‫خروجی‬ ‫در‬ ‫را‬ ‫هستند‬
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()‫ارسال‬‫باش‬ ‫می‬ ‫صورت‬ ‫بدین‬ ‫که‬ ‫کنیم‬ ‫می‬:‫د‬
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: ";
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() ‫تابع‬ ‫سازی‬ ‫پیاده‬
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‫دار‬ ‫پارامتر‬ ‫صورت‬ ‫به‬ ‫متدها‬ ‫این‬ ‫هم‬ ‫گاه‬ ‫هیچ‬ ‫و‬ ‫باشد‬ ‫می‬
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‫کنیم‬ ‫اضافه‬ ‫برنامه‬ ‫به‬ ‫نیز‬ ‫مخرب‬ ‫تابع‬ ‫یک‬ ‫باید‬ ‫کردیم‬ ‫استفاده‬ ‫سازنده‬ ‫از‬ ‫خود‬ ‫برنامه‬ ‫در‬ ‫که‬ ‫هنگامی‬ :.
‫که‬ ‫است‬ ‫تابعی‬ ‫مخرب‬ ‫تابع‬‫پس‬ ‫وظیفه‬‫است‬ ‫شده‬ ‫ایجاد‬ ‫سازنده‬ ‫متد‬ ‫توسط‬ ‫که‬ ‫دارد‬ ‫را‬ ‫ای‬ ‫حافظه‬ ‫دادن‬‫بنابرای‬ .‫اگر‬ ‫ن‬‫متد‬
‫کالس‬ ‫به‬ ‫را‬ ‫ای‬ ‫سازنده‬.‫کنیم‬ ‫اضافه‬ ‫خود‬ ‫کالس‬ ‫به‬ ‫نیز‬ ‫را‬ ‫مخرب‬ ‫متد‬ ‫یک‬ ‫باید‬ ‫حتما‬ ،‫کردیم‬ ‫اضافه‬
‫تعداد‬ ‫کردن‬ ‫مشخص‬ ‫برای‬ ‫سازنده‬ ‫متد‬ ‫از‬‫ضرای‬ ‫تعداد‬ ،‫وجهی‬ ‫چند‬ ‫مثلث‬ ‫یک‬ ‫ی‬ ‫ها‬ ‫ضلع‬ ‫تعداد‬ ،‫بردار‬ ‫یک‬ ‫بعدهای‬‫ب‬
.‫شود‬ ‫می‬ ‫استفاده‬ ... ‫و‬ ‫دو‬ ‫درجه‬ ‫معادله‬ ‫یک‬
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 ‫قسمت‬ ‫متغییرهای‬ ‫تمام‬
} ‫است‬ ‫شده‬ ‫داده‬ ‫قرار‬ ‫صفر‬ ‫با‬ ‫برابر‬ ‫جا‬ ‫این‬ ‫در‬ ‫که‬
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-‫مخرب‬ ‫متد‬‫باش‬ ‫می‬ ‫ساده‬ ‫توابع‬ ‫سازی‬ ‫پیاده‬ ‫گرنداشتیم‬ ‫اشاره‬ ‫اگر‬ ،‫گفتیم‬ ‫قبل‬ ‫مطالب‬ ‫در‬ ‫که‬ ‫طور‬ ‫همان‬ :‫ن‬‫د‬ ‫در‬ ‫و‬ ‫د‬‫اخل‬
‫ن‬ ‫نمی‬ ‫چیزی‬ ‫آن‬ ‫داخل‬ ‫در‬ ‫و‬ ‫گذاریم‬ ‫می‬ ‫خالی‬ ‫را‬ ‫متد‬ ‫این‬ ‫که‬ ‫این‬ ‫یا‬ ‫کنیم‬ ‫می‬ ‫چاپ‬ ‫پیغام‬ ‫بک‬ ‫یا‬ ‫نیز‬ ‫مخرب‬ ‫متد‬.‫ویسیم‬
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;
}
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-‫اشاره‬ ‫(با‬ ‫سازنده‬ ‫متد‬)‫گر‬:‫دستورات‬ ‫و‬ ‫قواعد‬ ‫باید‬ ‫بنابراین‬ ،‫کردیم‬ ‫استفاده‬ ‫گرها‬ ‫اشاره‬ ‫از‬ ‫خود‬ ‫برنامه‬ ‫در‬ ‫اگر‬
‫به‬ ‫مربوط‬.‫کنیم‬ ‫سازی‬ ‫پیاده‬ ‫را‬ ‫متد‬ ‫نوع‬ ‫این‬
.-)‫گر‬ ‫اشاره‬ ‫(بدون‬ ‫مخرب‬ ‫متد‬‫این‬ :‫نو‬‫قبل‬ ‫مثال‬ ‫در‬ ‫را‬ ‫متد‬ ‫ع‬‫های‬ ‫نکته‬ ‫و‬ ‫مطالب‬ ‫تمامی‬ ‫و‬ ‫دادیم‬ ‫قرار‬ ‫بررسی‬ ‫مورد‬
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 ‫چهارم‬ ‫مرحله‬‫حلقه‬ ‫یک‬ :
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:
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>
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) ‫متد‬ ‫سازی‬ ‫پیاده‬‫کپی‬ ‫سازنده‬
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)
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‫انجام‬ ‫برای‬ ‫هم‬ ‫و‬
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 ‫متد‬ ‫سازی‬ ‫پیاده‬
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];
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)
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(); ‫سازنده‬ ‫متد‬
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;
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;
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];
}
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()
{
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()
{
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:
… … …;
… … …;
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;
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;
}
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;
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")
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‫از‬ ‫اولی‬ ‫که‬ ‫داریم‬ ‫نیاز‬ ‫متغییر‬ ‫دو‬ ‫به‬ ‫ما‬
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.‫است‬ ‫شده‬ ‫داده‬ ‫نمایش‬ ‫خروجی‬ ‫در‬‫انجام‬ ‫اشیاء‬ ‫روی‬ ‫بر‬ ‫محاسباتی‬ ‫عملیات‬ ‫گاه‬ ‫هر‬ ‫که‬ ‫گفتیم‬ ‫قبلی‬ ‫مطالب‬ ‫طبق‬
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()‫مورد‬
‫را‬ ‫آن‬ ‫ما‬ ‫چون‬ ‫آید‬ ‫نمی‬ ‫پیش‬ ‫مشکلی‬ ،‫بگیرد‬ ‫قرار‬ ‫استفاده‬.‫ایم‬ ‫کرده‬ ‫سربارگزاری‬‫که‬ ‫عملگرهایی‬ ‫اکثر‬ ‫فصل‬ ‫این‬ ‫در‬ ‫ما‬
.‫کنیم‬ ‫می‬ ‫سربارگزاری‬ ‫را‬ ‫داریم‬ ‫سروکار‬ ‫ها‬ ‫آن‬ ‫با‬ ‫و‬ ‫گیرند‬ ‫می‬ ‫قرار‬ ‫استفاده‬ ‫مورد‬ ‫زیاد‬
C++ ‫پیشرفته‬ ‫نویسی‬ ‫برنامه‬
‫آ‬ ‫دانشگاه‬‫کرمانشاه‬ ‫واحد‬ ‫اسالمی‬ ‫زاد‬
Page | 50
‫فص‬ ‫این‬ ‫در‬ ‫است‬ ‫قرار‬ ‫که‬ ‫عملگرهایی‬‫ا‬ ‫عبارت‬ ‫کنیم‬ ‫سربارگزاری‬ ‫را‬ ‫ها‬ ‫آن‬ ‫ل‬:‫از‬ ‫ند‬
1-) + ( ‫جمع‬ ‫عملگر‬6-( ‫تفریق‬ ‫عملگر‬-).-) * ( ‫ضرب‬ ‫عملگر‬9-) / ( ‫تقسیم‬ ‫عملگر‬5-( ‫قرینه‬ ‫عملگر‬-)
2-) ++ ( ‫افزایشی‬ ‫عملگر‬7-( ‫کاهشی‬ ‫عملگر‬--)6-( ‫ای‬ ‫مقایسه‬ ‫عملگرهای‬>‫و‬<)4-( ‫دهی‬ ‫نسبت‬ ‫عملگر‬=)
11-( ‫ترکیبی‬ ‫عملگرهای‬+=‫و‬*=‫و‬=-‫و‬/=)11-‫عملگر‬cin(>>)16-‫عملگر‬cout(<<.)
‫توا‬ ‫می‬ ‫را‬ ‫عملگرها‬ ‫این‬‫در‬ ‫کلی‬ ‫صورت‬ ‫به‬ ‫ن‬‫زیر‬ ‫صورت‬ ‫به‬ ‫گروه‬ ‫دو‬:‫کرد‬ ‫بندی‬ ‫دسته‬
‫عملگرها‬
‫عملوندی‬ ‫تک‬
‫قرینه‬(-)
‫افزایشی‬) ++ (
‫کاهشی‬(--)
‫عملوندی‬ ‫دو‬
‫جمع‬) + (
‫تفریق‬(-)
‫ضرب‬) * (
‫تقسیم‬) / (
( < ‫و‬ > ) ‫ای‬ ‫مقایسه‬
‫دهی‬ ‫نسبت‬) = (
( /= ‫و‬ *= ‫و‬ -= ‫و‬ += ‫ترکیبی‬(
cin ( >> )
cout ( << )
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
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‫پارامتر‬ ‫یک‬ ‫دارای‬ ‫همیشه‬ ‫عملوندی‬ ‫دو‬ ‫عملگرهای‬ ‫ولی‬ ‫باشند‬ ‫می‬ ‫پارامتر‬ ‫بدون‬ ،‫عملوندی‬ ‫تک‬ ‫عملگرهای‬ :
‫کالس‬ ‫خود‬ ‫نوع‬ ‫از‬‫عدد‬ ‫نوع‬ ‫از‬ ‫پارامتر‬ ‫یک‬ ‫خاص‬ ‫مواقع‬ ‫بعضی‬ ‫در‬ ‫کاهشی‬ ‫و‬ ‫افزایشی‬ ‫عملگرهای‬ ‫فقط‬ .‫باشند‬ ‫می‬
.‫داد‬ ‫خواهیم‬ ‫توضیح‬ ‫را‬ ‫آن‬ ‫ادامه‬ ‫در‬ ‫که‬ ‫گیرند‬ ‫می‬ ‫صحیح‬
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; ‫شده‬ ‫ایجاد‬ ‫شی‬ ‫بازگشت‬ :‫چهارم‬ ‫مرحله‬
}
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]; ‫مرحله‬‫عملیات‬ ‫انجام‬ :‫ششم‬‫ضرب‬
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‫قرینه‬ ‫عملگر‬ ‫سربارگزاری‬
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:
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‫اند‬ ‫عبارت‬ ‫که‬ ‫گیرند‬ ‫می‬ ‫قرار‬ ‫استفاده‬ ‫مورد‬ ‫نویسی‬ ‫برنامه‬ ‫در‬ ‫صورت‬ ‫دو‬ ‫به‬ ‫کاهشی‬ ‫و‬ ‫افزایشی‬ ‫عملگرهای‬ :
.‫پسوندی‬ ‫و‬ ‫پیشوندی‬ :‫از‬
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 ‫نام‬ ‫با‬ ‫شی‬ ‫یک‬ ‫ایجاد‬ :‫دوم‬ ‫مرحله‬
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; :‫شده‬ ‫ایجاد‬ ‫شی‬ ‫بازگشت‬ :‫چهارم‬ ‫مرحله‬
}
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:
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
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‫می‬ ‫داده‬ ‫بازگشت‬‫شود‬‫ذ‬
}
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 :‫قسمت‬ ‫در‬ ‫عملگر‬ ‫سربارگزاری‬ ‫به‬ ‫مربوط‬ ‫متد‬ ‫نوشتن‬
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 " ‫یک‬‫پیغام‬
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;
‫تفاوت‬ ‫این‬ ‫با‬ ‫فقط‬ ‫کنند‬ ‫می‬ ‫عمل‬ )‫تقسیم‬ ‫و‬ ‫ضرب‬ ‫و‬ ‫تفریق‬ ‫و‬ ‫(جمع‬ ‫عملگرهای‬ ‫مانند‬ ‫دقیقا‬ ‫عملگرها‬ ‫ای‬‫ن‬ ‫حاصل‬ ‫که‬‫تیجه‬
:‫گیرد‬ ‫می‬ ‫قرار‬ ‫استفاده‬ ‫قابل‬ ‫زیر‬ ‫صورت‬ ‫دو‬ ‫از‬ ‫یکی‬ ‫به‬ ‫عملگر‬ ‫این‬ .‫ریزد‬ ‫می‬ ‫دوم‬ ‫عملگر‬ ‫در‬ ‫را‬
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 ‫قسمت‬ ‫در‬ ‫عملگر‬ ‫بارگزاری‬ ‫سر‬ ‫به‬ ‫مربوط‬ ‫تابع‬ ‫نوشتن‬
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;
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‫سربار‬ ‫باید‬ ‫را‬ ‫عملگری‬ ‫چه‬ ‫حاال‬ .‫است‬ ‫کرده‬ ‫جمع‬
.‫کنید‬ ‫دقت‬ ‫زیر‬ ‫ی‬ ‫نکته‬ ‫به‬ ،‫دوست‬ ‫عملگر‬ ‫با‬ ‫آشنایی‬ ‫و‬ ‫سوال‬ ‫این‬ ‫به‬ ‫جواب‬ ‫برای‬ ‫کرد؟‬ ‫گزاری‬
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‫خود‬ ‫نوع‬ ‫از‬ ‫دوم‬ ‫ی‬ ‫داده‬ ‫و‬ ‫باشد‬ ‫می‬‫کالس‬
‫جمع‬ ‫ای‬ ‫شی‬ ‫با‬ ‫را‬ ‫عددی‬ ‫که‬ ‫صورت‬ ‫بدین‬ .‫باشد‬ ‫می‬.‫ایم‬ ‫کرده‬
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.‫باشد‬
‫دوم‬ ‫مرحله‬‫از‬ ‫عدد‬ ‫یک‬ ‫دریافت‬ ‫برای‬ ‫قبال‬ .‫بدهیم‬ ‫انجام‬ ‫را‬ ‫ها‬ ‫داده‬ ‫دریافت‬ ‫به‬ ‫مربوط‬ ‫عملیات‬ ‫باید‬ ‫مرحله‬ ‫این‬ ‫در‬ :
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.‫دهیم‬ ‫بازگشت‬ ‫را‬ ‫دارد‬ ‫نام‬
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 ‫حلقه‬ ‫یک‬ ‫نوشتن‬ :‫دوم‬ ‫مرحله‬
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() ‫تابع‬
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;
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‫صحیح‬ ‫نحوه‬ ‫و‬ ‫مشخص‬ ‫را‬ ‫باشد‬ ‫می‬ ‫اشکال‬ ‫دارای‬ ‫که‬ ‫برنامه‬ ‫از‬ ‫هرقسمتی‬ ،‫زیر‬ ‫های‬ ‫کالس‬ ‫به‬ ‫توجه‬ ‫با‬ :
.‫بنویسید‬ ‫را‬ ‫آن‬ ‫نوشتن‬
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)
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‫هیچ‬ ‫متد‬ ‫این‬ ‫در‬
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().‫باشد‬ ‫می‬ ‫اشتباه‬ ‫نیز‬ ‫دستور‬ ‫این‬ ‫بنابراین‬ ،‫باشند‬ ‫داشته‬ ‫حضور‬
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 ‫کالس‬ ‫سازنده‬ ‫متد‬ ‫سازی‬ ‫پیاده‬
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>
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‫محض‬ ‫مجازی‬ ‫متد‬
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()‫مجازی‬ ‫متد‬ ‫یک‬ ،‫متد‬ ‫این‬ ‫بنابراین‬ .‫است‬ ‫شده‬ ‫داده‬ ‫قرار‬ ‫صفر‬ ‫با‬ ‫مساوی‬ ‫که‬ ‫دارد‬ ‫وجود‬
‫متد‬ ‫این‬ ‫از‬ ‫جدید‬ ‫تعریف‬ ‫یک‬ ‫باید‬ ‫حتما‬ ‫شده‬ ‫مشتق‬ ‫کالس‬ ‫و‬ ‫باشد‬ ‫می‬ ‫محض‬‫باشد‬ ‫داشته‬ ‫را‬‫مجازی‬ ‫متد‬ ‫یک‬ ‫اگر‬ ‫بنابراین‬ .
‫محض‬ ‫مجازی‬ ‫متد‬ ‫یک‬ ،‫متد‬ ‫آن‬ ‫که‬ ‫گیریم‬ ‫می‬ ‫نتیجه‬ ،‫شد‬ ‫داده‬ ‫قرا‬ ‫صفر‬ ‫با‬ ‫مساوی‬ ‫و‬ ‫داشت‬ ‫وجود‬ ‫مبنا‬ ‫کالس‬ ‫داخل‬ ‫در‬
.‫باشیم‬ ‫اشته‬ ‫را‬ ‫متد‬ ‫این‬ ‫از‬ ‫جدید‬ ‫تعریف‬ ‫یک‬ ‫باید‬ ‫حتما‬ ‫بنابراین‬ .‫باشد‬ ‫می‬
C++ ‫پیشرفته‬ ‫نویسی‬ ‫برنامه‬
‫آ‬ ‫دانشگاه‬‫کرمانشاه‬ ‫واحد‬ ‫اسالمی‬ ‫زاد‬
Page | 83
‫ک‬ ،‫باشد‬ ‫داشته‬ ‫محض‬ ‫مجازی‬ ‫متد‬ ‫یک‬ ‫حداقل‬ ‫که‬ ‫کالسی‬ ‫به‬‫انتزاعی‬ ‫یا‬ ‫تجریدی‬ ‫الس‬(abstract)‫کالس‬ .‫شود‬ ‫می‬ ‫گفته‬
A‫د‬ ‫محض‬ ‫مجازی‬ ‫متد‬ ‫یک‬ ‫چون‬ ،‫قبل‬ ‫مثال‬‫ا‬‫کالس‬ ‫بنابراین‬ ،‫رد‬A.‫باشد‬ ‫می‬ ‫انتزاعی‬ ‫یا‬ ‫تجریدی‬ ‫کالس‬ ‫یک‬
9-5‫ها‬ ‫تفاوت‬‫توابع‬ ‫سربارگزاری‬ ‫با‬ ‫مجازی‬ ‫متد‬ ‫ی‬
1-‫متفاوت‬ ‫ها‬ ‫آن‬ ‫نوع‬ ‫و‬ ‫پارامترها‬ ‫تعداد‬ ‫باید‬ ‫حتما‬ ‫توابع‬ ‫سربارگزاری‬ ‫در‬‫تعداد‬ ‫مجازی‬ ‫متدهای‬ ‫در‬ ‫که‬ ‫حالی‬ ‫در‬ ‫باشد‬
.‫باشد‬ ‫می‬ ‫یکسان‬ ‫پارامترها‬ ‫نوع‬ ‫و‬ ‫پارامترها‬
6-‫کرد‬ ‫سربارگزاری‬ ‫را‬ ‫نیست‬ ‫کالس‬ ‫عضو‬ ‫که‬ ‫تابعی‬ ‫توان‬ ‫می‬ ،‫توابع‬ ‫سربارگزاری‬ ‫در‬‫برای‬ ‫که‬ ‫حالی‬ ‫در‬
.‫باشد‬ ‫کالس‬ ‫عضو‬ ‫حتما‬ ‫باید‬ ‫تابع‬ ،‫مجازی‬ ‫متدهای‬ ‫سربارگزاری‬
.-‫س‬ ‫توان‬ ‫می‬ ،‫توابع‬ ‫سربارگزاری‬ ‫در‬‫از‬ ‫استفاده‬ ‫که‬ ‫حالی‬ ‫در‬ .‫کرد‬ ‫سربارگزاری‬ ‫مختلفی‬ ‫های‬ ‫فرم‬ ‫به‬ ‫را‬ ‫کالس‬ ‫ارنده‬
.‫باشد‬ ‫می‬ ‫معنی‬ ‫بی‬ ‫ها‬ ‫سازنده‬ ‫سربارگزاری‬ ‫برای‬ ‫مجازی‬ ‫متد‬
9-2‫چندگانه‬ ‫بری‬ ‫ارث‬
‫معرفی‬ ‫شده‬ ‫مشتق‬ ‫کالس‬ ‫یک‬ ‫را‬ ‫دومی‬ ‫و‬ ‫مبنا‬ ‫کالس‬ ‫یک‬ ‫را‬ ‫اولی‬ ‫که‬ ‫آوردیم‬ ‫وجود‬ ‫به‬ ‫کالس‬ ‫دو‬ ‫ما‬ ‫قبل‬ ‫های‬ ‫مثال‬ ‫در‬
‫کالس‬ ‫و‬ ‫کردیم‬‫کال‬ ‫از‬ ‫دومی‬‫ب‬ ‫ارث‬ .‫برد‬ ‫می‬ ‫ارث‬ ‫به‬ ‫را‬ ‫خود‬ ‫های‬ ‫گی‬ ‫ویژه‬ ‫اولی‬ ‫س‬‫باشد‬ ‫می‬ ‫صورت‬ ‫بدین‬ ‫چندگانه‬ ‫ری‬
‫که‬‫باشد‬ ‫مبنا‬ ‫کالس‬ ‫چندین‬ ‫دارای‬ ‫و‬ ‫ببرد‬ ‫ارث‬ ‫به‬ ‫کالس‬ ‫چندین‬ ‫از‬ ‫را‬ ‫خود‬ ‫های‬ ‫گی‬ ‫ویژه‬ ‫شده‬ ‫مشتق‬ ‫کالس‬.
.‫باشد‬ ‫می‬ ‫سازی‬ ‫پیاده‬ ‫قابل‬ ‫صورت‬ ‫دو‬ ‫به‬ ‫چندگانه‬ ‫بری‬ ‫ارث‬
1-‫مست‬ ‫غیر‬ ‫چندگانه‬ ‫بری‬ ‫ارث‬‫قیم‬‫کالس‬ ‫مثال‬ ‫که‬ ‫باشد‬ ‫می‬ ‫صورت‬ ‫بدین‬ ‫بری‬ ‫ارث‬ ‫نوع‬ ‫این‬ :B‫کالس‬ ‫از‬A‫می‬ ‫ارث‬
‫کالس‬ ‫و‬ ‫برد‬C‫کالس‬ ‫از‬ ‫نیز‬B‫کالس‬ ‫که‬ ‫گفت‬ ‫توان‬ ‫می‬ ‫بنابراین‬ .‫برد‬ ‫می‬ ‫ارث‬C‫کالس‬ ‫های‬ ‫گی‬ ‫ویژه‬ ‫هم‬B‫به‬ ‫را‬
‫مستقیم‬ ‫صورت‬‫کالس‬ ‫های‬ ‫گی‬ ‫ویژه‬ ‫هم‬ ‫و‬A‫را‬‫برد‬ ‫می‬ ‫ارث‬ ‫به‬ ‫مستقیم‬ ‫غیر‬ ‫صورت‬ ‫به‬.‫صورت‬ ‫به‬ ‫کالس‬ ‫این‬ ‫شکل‬
:‫ایم‬ ‫کرده‬ ‫سازی‬ ‫پیاده‬ ‫زیر‬ ‫در‬ ‫نیز‬ ‫را‬ ‫آن‬ ‫کدهای‬ ‫و‬ ‫باشد‬ ‫می‬ ‫زیر‬
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‫بار‬ ‫دو‬ ‫را‬
‫به‬ ‫مجازی‬ ‫مبنای‬ ‫کالس‬ ‫از‬ ‫ما‬ ‫مشکل‬ ‫این‬ ‫رفع‬ ‫برای‬ ‫و‬ ‫شد‬ ‫خواهد‬ ‫اشکال‬ ‫دچار‬ ‫ما‬ ‫برنامه‬ ‫بنابراین‬ .‫برد‬ ‫می‬ ‫ارث‬ ‫به‬
:‫کنیم‬ ‫می‬ ‫استفاده‬ ‫زیر‬ ‫صورت‬
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
{
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>
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;
}
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;
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;
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;
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];
}
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)
{
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‫محاسباتی‬ ‫هر‬ ‫پس‬ ،‫شی‬ ‫نه‬ ‫باشد‬ ‫می‬ ‫متغییر‬ ‫یک‬ ‫فقط‬
‫نه‬ ‫باشد‬ ‫می‬ ‫اشیاء‬ ‫برای‬ ‫فقط‬ ‫سربارگزاری‬ ‫عملیات‬ .‫کنیم‬ ‫سربارگزاری‬ ‫را‬ ‫آن‬ ‫نباید‬ ‫بگیرد‬ ‫صورت‬ ‫آن‬ ‫روی‬ ‫بر‬ ‫که‬
.‫متغییرها‬
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
C++ ‫پیشرفته‬ ‫نویسی‬ ‫برنامه‬
‫آ‬ ‫دانشگاه‬‫کرمانشاه‬ ‫واحد‬ ‫اسالمی‬ ‫زاد‬
Page | 95

More Related Content

PDF
Amjadi - Ebook 5 - Function - v1
PDF
Jozve c#3 mohamady
PDF
Quantom
PDF
Jozve c#2 mohamady_zahedy
PDF
MIPS and QtSpim
PPTX
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
PDF
Mohamady zahedy c#
PDF
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
Amjadi - Ebook 5 - Function - v1
Jozve c#3 mohamady
Quantom
Jozve c#2 mohamady_zahedy
MIPS and QtSpim
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
Mohamady zahedy c#
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از

Similar to Advance programming c++ (20)

PDF
Amjadi - Ebook 6 - Ref,Out - v1
PPT
Flowchart
PPT
PPT
DOCX
برنامه سازی3
PDF
Radmanesh c#-1
PDF
How to program with c in persian
PPTX
آشنایی با زبان جاوا - مقدماتی اندروید
PDF
Learn orcad 9.2
PDF
بخش اول :كاربرد رايانه در برق (آموزش ساده سيمولينك )
PDF
2 arrays in c++ programming aramse
PPTX
C-1.pptx
PPTX
DB_fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf5_SQL.pptx
PDF
الدالات الأساسية-في-برنامج-الإكسل
DOCX
نرم افزار3 خرداد
PDF
Amjadi - Ebook 7 - Class - v1
PDF
امتحان دی ماه وب مقدماتی
PDF
Software Fault Avoidance in Implementation
DOCX
Barnamesazi1c#
PDF
آموزش نرم افزار MSP
Amjadi - Ebook 6 - Ref,Out - v1
Flowchart
برنامه سازی3
Radmanesh c#-1
How to program with c in persian
آشنایی با زبان جاوا - مقدماتی اندروید
Learn orcad 9.2
بخش اول :كاربرد رايانه در برق (آموزش ساده سيمولينك )
2 arrays in c++ programming aramse
C-1.pptx
DB_fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf5_SQL.pptx
الدالات الأساسية-في-برنامج-الإكسل
نرم افزار3 خرداد
Amjadi - Ebook 7 - Class - v1
امتحان دی ماه وب مقدماتی
Software Fault Avoidance in Implementation
Barnamesazi1c#
آموزش نرم افزار MSP
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