صفحه 1:

صفحه 2:
شي و كلاس باید دو فاز آنالیز و پیاده سازي را از هم جدا نمود * هنگام تجزیه و تحلیل مساله ما اشیا را شناسايي میکنیم و ویژ گيهاي هر يك را بیان میداریم هنگام پیاده سازي بصورت نرم افزار باید اشیا تعریف شوند و نمونه هايي از آنها ساخته شده و مساله را حل نمایند يك شي يس از اينكه طراحي شد بصورت يك کلاس در برنامه تعریف مي‌شود متغيرهايي که از کلاس ساخته مي‌شوند در برنامه اصطلاحاً شي و یا نمونه میگویند " بايد توجه داشت كه از كلمه شي در 2 جا با مفاهیم مختلف استفاده شده است * 1. هنكام طراحي * 2. هنكام ساخت برنامه

صفحه 3:
coe تئوري 2 ۱ " سه مولفه اصلي برنامه نويسي شي كرا * 1. بسته بندي اطلاعات * 2. پنهان سازي اطلاعات * 3 ورائت بسته بندي اطلاعات با تعریف يك شي و رفتارهایش و پیاده سازي بصورت كلاس انجام مي شود پنهان سازي اطلاعات با تعریف رفتارها و صفتهاي عمومي و خصوصي و يباده سازي بصورت ب نوع عضویت در کلاس انجام ورائت شبیه ورائت بیولوژیکی است که در آن فرزندان . صفاتي 5 از والدین به ارث می برند. در این رابطه می توان از کلاس موجودٌ ‎(4b)‏ کلاس جدید(فرزند) را ایجاد کرد.

صفحه 4:
کلاس . الگويي براي اشياء‌ي است که ويژگيهاي مشتر كي دارند و رفتارهاي ب .مي دهند ءشیء نمونه خاصی از کلاس است 7

صفحه 5:
(data abstraction) b ‏انتزاع داده‎ * فقط ويژگيهاي اساسي انواع بدن ارائه اطلاعات جزئي . قابل نمایش است. کلاسها از مفهوم نوع داده انتزاعي پيروي مي ‎MS‏

صفحه 6:
كلاس ها واشياء: بسته بندي 2 " در برنامه نويسي شي كرا هر شي از يك سري متغير هاي عضو به نام صفت و یک سري توابع كه به توابع رفتار(متد) معروفاند تشكيل مي شود " بايد توجه داشت كه براي اعلان كلاس از كلمه كليدي 1355© استفاده مى شود

صفحه 7:
خصوصي و عمومي: پنهان سازي " برخي ویژگیها و يا پيچبدگيهاي يك شي باید از دیگر اشیا پنهان بماند و هر شي تنها يك ظاهري (1۳0۲6۳۲366) که براي دیگر اشیا لازم است را به نمایش میگذارد * يك صفت و یا يك رفتار میتواند درون شي پنهان باشد و دیگر اشیا از آن بي اطلاع باشند مکانیسم اولیه پنهان سازي داده ها قرار دادن آن در یک کلاس و خصوصي سازي آن است داده ها یا توابع خصوصي را تنها میتوان از داخل کلاس در دسترس قرار دارد از سوي دیگر داده ها يا توابع عمومي از خارج کلاس در دسترس قرار میگیرند

صفحه 8:
توابع عضو * معمولا توابع به صورت عمومي وداده ها به صورت خصوصي تعریف مي شوند از این رو از داده ها فقط در توابع عضو كلاس استفاده مي شوند ولي از توابع عضو درخارج از كلاس هم مي توان استفاده كرد . بايد توجه داشت كه در بعضي مواقع مجبور مي شويم از توابع خصوصي و داده هاي عمومي استفاده کنیم * تابع عضو را مي توان : . 1 در داخل کلاس اعلان کرد ودر همان جا پیاده سازي کنیم (در صورتي که تعریف تابع کوتاه باشد) * 2. در داخل کلاس اعلان کرد ودر خارج کلاس پیاده سازي کنیم

صفحه 9:
تعریف کلاس در ) ++ براي تعریف کلاس از کلمه كليدي 255/» و ساختاري به 1 صورت زیر استفاده می شود: pubjic: داده ها و توابع عمومي داده ها و توابع اختصاصي Corretedied: 5 ‏داده ها ي حفاظت شده‎ i

صفحه 10:
قو 10 ضيح نحوه تعريف كلاس نامكذاري كلاس همانند متغيرها انجام ميشود. نام كلاس بايد بيانكر موجوديت باشد و حتي الامكان از اسامي بي ربط استفاده نشود توابع با داده هايي که بعد از تعریف کلاس يا بعد از کلمه كليدي 0۲1۷516 ‎Ole!‏ مي‌شوند , براي کلاس اختصاصي خواهند بود و فقط و فقط اجزاي همان كلاس حق استفاده و دسترسي به آنهارا دارند. 5 داده ها و توابعي كه بعد از كلمه كليدي 0110115 تعريف مي شوند به صورت عمومی خواهند بود و هر قسمت ديكر برنامه مى تواند به آنها دسترسى داشته باشد. " 5 . ‎els‏ و داده هایي که پس از کلمه كليدي 0۲0661601 تعریف مي‌شوند افظت شده هستند و در ورائت مورد آستفاده قرار مي گیرند. *

صفحه 11:
* براي تعریف شي از يك کلاس در هر جايي از برنامه به صورت زیر عمل کنید. " نام شي ء نام كلاس : " تعريف اشياء همانند تعريف متغيرهاست

صفحه 12:
كلاس ساده ‎of‏ اين برنامه شامل یک کلاس و دو شیء از آن #include <iostream.h> ‏كلاس است‎ class smallobj { private: int somedata; public: void setdata(int d) {somedata=d; } void showdata() {cout<<“data is”<<somedata;} yi 12

صفحه 13:
استفاده از کلاس بعنوان يك نوع داده‌اي 2 13 int main() smallobj s1,s2; sl.setdata(1006) ; s2.setdata(876); s1.showdata(); s2.showdata(); return 0; {

صفحه 14:
توضیح برنامه + ۱ " كلاس [5073|110 كه در اين برنامه اعلان شده حاوي یک عنصر داده‌اي و دو تابع عضو مي باشد كه اين دو تابع با عضو داده اي داخلي کار میکنند و از خارج كلاس در دسترسي هستند * تابع عضو اول به عضو داده اي یک مقدار نسبت میدهد و 9 تابع عضو دوم این مقدار را در خروجي نمایش میدهد 14

صفحه 15:
استفاده از کلاس ها 4 * پس از اعلان کلاس میتوان در داخل تابع 0۳031) از اين كلاس ها براي تعريف شيء استفاده كرد 2 — * مثال:52 , 51 [5۳۱۵۱۱00 : ‎C peek‏ نام اشیاء نام تس تعریف یک شیء شبیه تعریف یک متغیر از هر نوع داده اي است که براي حافظه گرفته مي شود چون شيء در واقع نمونه اي از یک کلاس است به تعریف ش شی نمونه سازي شیء نیز می گویند (توجه داشته باشید که اتلاقهاي فوق در هنگام پیاذه سازي معتبر هستند) 15

صفحه 16:
* دستور زیر تابع عضو 5610512 را احضار مي کند: ‎sl.setdata(1006) =‏ 1 * از آنجا که تابع ]05660 یک تابع عضو از کلاس مي‌باشد بايد در ارتباط با يكد شيء از اين كلاس (51) احضار شودپس نوشتن دستور زیر باعث تولید پیغام خطاي کاربر مي شود: ‎setdata(1006) *‏ * براي استفاده از یک تابع عضو عملگر نقطه نام شيء و تابع م, عضو را به هم وصل میکند

صفحه 17:
جح + توابع عضو کلاس حتماً باید براي يك شيءساخته شده فراخواني شوند

صفحه 18:
J a * در این مثال یک کلاس که مربوط به شیء دایره است را مورد بررسي قرار میدهي class CCircle { قرفا كلتو عورا رمال عن ‎private:‏ ‏تعريف كلاس به همراه متفيرهاي عضو ۲ و بيان نمونه اوليه توابع عضو 60 1101 ‎int Radius;‏ ‎COLORREF Fillcolor;‏ public: void set(int x,int y,int r, COLORREF fc); void draw(CDC *pdc); 1

صفحه 19:
ادامه مثال اننم کی ‎void circle): set (int x,int y,int r, COLORREF fc)‏ ‎qt‏ اپراتور محدوده کلاس ‎Xco=x;‏ تابع براي مقدار دهي به مقادیر عضو استفاده شده است Radius=r; Fillcolor=fc; 1 void CCircle::draw(CDC *pdc) { CBrush mBrush; mBrush. CreateSolidBrush(Fillcolor) ; CBrush *0ldBrush=pdc->SelectObject (&mBrush) ; pdc->ELlipse(Xco-Radius , Yco-Radius , Xco+Radius , Yco+Radius) ; pdc->SelectObject (OldBrush) ; پیاده سازي توابع عضو

صفحه 20:
ادامه مثال void CTestAppD1lg: : OnBnClickedBtndrawcircle() { CCircle cl,c2; cl.set(40,40,30,RGB(255,0,0)); c2.set(100,100,50,RGB(0,0,255)); CDC *pdc=GetDC(); cl.draw(pdc) ; c2.draw(pdc) ; ReleaseDC(pdc) ; 20

صفحه 21:

صفحه 22:
توضیح + ۱ 9 در برنامه قبل با دو نوع داده اي جدید اشنا شدیم: ‎COLORREF *‏ ۰« * نوع داده اي اول (010888۴)) براي نگهداري رنگ است. رنگها در ویندوز از ترکیب سه رنگ اصلي قرمز. سبز و آبي تولید میشوند. ‎RGB 9 Slo *‏ سه رنگ قرمز. سبز و آبي را با هم تر کیب میکند. میزان هر رنگ مقداري بین 0 تا 255 دارد. * (808)255,0,0 رنگقرمز لست " نوع داده اي دوم (0100) كلاسي است كه توابع مربوط به عمليات نقاشى روي فرمها در ويندوز را انجام ميدهد. 22

صفحه 23:
مثالي دیگر از تعریف کلاس ‎class employee {‏ ‎char name[20]; // private by default‏ ‎public :‏ ‎void putname (char *s); //publics‏ ‎void getname (char *s);‏ ‎void putage (double w);‏ ‎double getage ();‏ ‎private :‏ ‎double Age; //private again‏ , 6۳1 ( ‎employee em3,em4;‏ ‎void employee : : putname ()‏ 5 + void employee : : putname () 23

صفحه 24:
تمرین: برنامه اي که يك شي دایره در آن تعریف شود. شعاع دایره را از ورودي خوانده و مساحت آن را محاسبه کرده و در خروجي ببرد. (تمام اعضاي داده اي اختصا اند) #include <conio.h> #include <iostream.h> class circle{ int radius; public: void get_radius(); void print(); 17 void circle : : get_radius() { cout<<“Enter radius”; cin>> radius; 24

صفحه 25:
void 61۳016 : : print () { float 5: s = radius * radius * 3.14; cout << “ Area="<<s; + MA | | | | | 0 00/0/0000 ۱۱ int main () { circle cl; C1.get_radius(); cl.print(); getch(); return 0; 25

صفحه 26:
* بخش 1: " يك كلاس براي مشخصات درس تعریف نمایید * صفات: نام درس, تعداد واحد و نمره * رفتارها: قراردادن نام براي درس, قرار دادن تعداد واحد براي درس قرار دادن نمره براي درس و توابعي براي بر گرداندن مقادیر نسبت داده شده * دیگر رفتارها: محاسبه نمره در واحد و برگرداندن آن 26

صفحه 27:
ادامه تمرین + 9 بخش 2 " براي تست کلاس نوشته شده با نام 16550۳/) درون تابع ۲۱۵۴ اشیا مناسب از نوع کلاس را تعریف نموده و متفيرهاي عضو آنرا مقداردهی نمایید و مقادیر نسبت داده شده را 27

صفحه 28:
9 بخش 3 " يك كلاس با نام 111 ©5]1000) تعريف نماييد * صفات: نام دانشجو, شماره دانشجويي, سه درس در نيمسال (از نوع ‎us «s Clesson‏ طراحي شده) * رفتارها: توابع مورد نیاز جهت مقدار دهي به نام و شماره دانشجويي و بر گرداندن اين مقادیر * دیگر رفتارها: تعیین نام براي هر يك از دروس دانشجو و نمره براي آن درس * دیگر رفتارها: محاسبه معدل با توجه به نمره دانشجو در دروس. 28

صفحه 29:
* پروژه معرفي شده را بعنوان تمرین درسي انجام دهید (نمانتحویل‌جلسه لینده)

صفحه 30:
= (Constructor) le 035 jle

صفحه 31:
سازنده ها (620۳51۲۱610۲5) اغلب اوقات میخواهیم هنكام ايجاد شيء (تعريف متغي کلاس) آترا مقداردهي اولیه کنیم (متفيرهاي عضو ان را مقداردهي کنیم) و پا عملیات خاصي را انجام دهیم. 9 تمامي كلاس ها تابعي به نام سازنده دارند که بطور خودکار هنگام تعريف شي از آن: كلاس اجرا ميشود. يکي از وظایف سازنده. مقدار دهي اوليه به متغيرهاي عضو شي است. توابع سازنده هر کلاس, هم نام کلاس هستند. یک کلاس میتواند بیش از یک سازنده داشته باشد. که براساس قوانین چندريختي, هنگام ساخت شي. مشخص میشود که از کدام سازنده بايد استفاده شود. 31

صفحه 32:
سازنده ها و دادن مقدار اولیه به اشیاء براي پي بردن به مفهوم سازنده ها (60۳51۲610۲) روش مقدار دادن به یک متفیر را به یاد آورید. دستور زیر ضمن تعریف متغیر ۷ از نوع 11 مقدار اولیه آن را صفر تعیین مي کند. 0 2 ۷ ۱۱۲ : کلاس مي تواند تابع عضو ویژه اي به نام سازنده داشته باشد ولي این تابع هیچ مقداري را نمیتواند پر اند و حتي از نوع ۷0/0 هم نیست. سازنده , همنام با كلاسي است که در آن تعریف مي شود و هنگام ایجاد اشيايي از آن کلاس به طور خودکار اجرا مي شود. class myClass { int a; int b; public: myClass(); void show();

صفحه 33:
33 myClass : : myClass ( ) void myClass : : show ( ) 1 cout << “a="<<a; cout<<“b="<<b; + int main () 1 myClass ob1; ob1.show(); return 1; 1 ‏خروجي‎ : a=0 b=10

صفحه 34:
سازنده ها (ادامه...) + * تمامي کلاسها داراي سازنده هستند و اگر ما براي يك کلاس سازنده ننویسیم کامپایلر از سازنده پیش فرض ‎Default)‏ ‏۷۲ استفاده میکند * فراخوانی سازنده توسط کامپایلر هنكام تعریف متغير بصورت خود کار انجام میشود

صفحه 35:
35 سازنده هايي با پارامتر توابع سازنده مي توانند پارامتر داشته باشند. معمولاً این پارامترها براي مقدار اولیه دادن به متغیر های عضو شيء به کار مي روند. مثال زیر را در نظر بگیرید ‎class myClass {‏ int x; int y; public: myClass ( int i, int j); void show(); 1 myClass : : myClass (int i, int j ) 1

صفحه 36:
void myClass : : show ( ) 1 cout << “x="<<x; cout << “y ="<<y << endl; myClass ob1 (10, 15); myClass ob2 (20, 25); ob1.show(); ob1.show(); return 1; x=10 y=15 x=20 y=25 36 ۱ 1 int main () {

صفحه 37:
مثال: یک سازنده * روش اول: * روش دوم: (دستور انتساب) (فراخواني سازنده براي 6۳1 ) ‎class counter class counter 5‏ 1 3 ‎private: private:‏ ‎int cnt; int cnt;‏ ‎public: public:‏ ‎counter() { counter():cnt(0)‏ ‎cnt=0; {‏ } } 1 1 نتیجه عملي که انجام میشود در هر دو روش یکسان است يس از تعريف يك شي از كلاس 2010111 مقدار ۲01 بصورت خود کار برابر صفر خواهد شد

صفحه 38:
مثال: يك سازنده + " در مثال 6 که در قبل گفته شد مي توان به جاي تابع 6() از یک سازنده استفاده کنیم: circle(int x ,int y,int r,color fc) : xco(x) , yco(y), radius(r) * { }, fillcolor(fc) * _ باید توجه داشت که توابع سازنده هیچ نوع بر گشتي ندارند زیرا سازنده به طور اتوماتنیک توسط سیستم احضار مي شود 38

صفحه 39:
تمرین 3 * يك كلاس براي نگهداري دانشجویان طراحي کنید با نام (أ5 511) که ظرفیت نگهداري قیازه دانشجويي 20 دانشجو را داشته باشد. نوع صحیح به طول 20 براي نگهداري شماره دانشجويي ياني که در حال حاضر در لیست هستند نما نت حمیا حلسه * افزودن يك دانشجو به لیست: (زمانت حویل‌علسه [ * بارامتر ورودي يك عدد صحيح (شماره دانشجوبي) * مقدار خروجي تابع اكر بتواند اضافه كند 1 و در غير اينصورت صفر بر ميكرداند هر فا این از سوت میت یز بت هد مینست هو حذف يك دانشجو از لیست: شیر داد خروجي: اگر فرد در لیست باشد آنرا حذف و عدد 1 برمیگرداند و در غير اینصورت صفر برمیگرداند و قراخ ی کرت میت ]و تن تا جرا یس جک قوق * نمایش لیست 39 بر گرداندن تعداد دانشجویان در ليست

صفحه 40:
آر گومانهاي پیش فرض در سازنده ها * سازنده ها مي توانند حاوي آرگومانهاي پیش فرض باشند. = با تعیین آر گومانهاي پیش فرض براي سازنده حتي در صورت عدم مقدار دهي در فراخواني سازنده, این آطمینان وجود دارد که اشیاء مقداردهی اولیه شده اند. * سازنده اي که برنامه نویس ایجاد میکند و تمام آر گومانهاي آن را به طور پیش فرض انتخاب کرده است (يا به هیچ آر گوماني نیاز ندارد ) سازنده پیش فرض نام دارد. * هر کلاس فقط یک سازنده پیش فرض می تواند داشته باشد. 40

صفحه 41:
41 class myClass { int x; int y; public: myClass (int i = 0, int j = 10); void show(); 1 mycClass : : myClass (inti, int j ) { x=i; y=); 7

صفحه 42:
void myClass : : show () { cout << “x="<<x; , cout << “y="<<y<<endl; } int main () { myClass ob1 (11, 99); myClass ob2 (); ob1.show(); ob1.show(); return 1; } ‏خروجي‎ : 211 ۷۶9 x=0 y=10 42

صفحه 43:
تمرین 4 * يك کلاس براي ذخیره سازي زمان تعریف نمایید با نام ۲1۳06 01/۷ متفيرهاي عضو: ساعت. دقيقه و ثانیه پیش فرض که مقادیر 0 براي تمامي متفیرها لحاظ کند که با توجه به شي ورودي و مقادیر آن متفيرهاي عضو را مقداردهي نماید * تابعي که تفاضل زماني شي و شي ورودي را محاسبه نموده و بصورت يك شي ‎CMYTIMe‏ ‏برگرداند (6 0۱۷/۲۱۴06 ا5عم))۲۱6::۵166 0 عصصن۲ لا * تابعي که حاصل جمع زماني شي و شي ورودي را محاسبه نموده و بصورت يك شي 0۱/۲۱۳6 بر گرداند (6 ‎CMyTime CMyTime::Add(const CMyTime‏ * تابعي که يك شي از نوع ۱۷/۷/۲106 را بعنوان پارامتر گرفته و اگر مقدار ‎HT‏ ‏ورودي باشد مقدار 1 و اگر کوچکتر بود -1 و اگر برابر بودند مقدار 0 برگرداند. int CMyTime::Compare(const CMyTime &t) * رگتر از پارامتر 43

صفحه 44:
4 ‏تمرین‎ dol! * يك کلاس براي ذخیره سازي زمان تعریف نمایید با نام ‎CMyDateTime‏ و ثانیه متفيررهاي عضو: ساعت. دا * سازنده: * سازنده پیش فرض که مقادیر تاریخ و زمان جاري سیستم براي تمامي متفیرها لحاظ کند * سازنده كپي که با توجه به شي ورودي و مقادیر آ متفيرهاي عضو را مقداردهي نماید * سازنده اي که پارمترهاي سال, ماه. روز. ساعت. دقیقه و ثانیه را بگیرد و اعضا را مقداردهي نماید. ۴ توابع عضود * تابعي که تفاضل زماني شي و شي ورودي را محاسبه نموده و بصورت يك شي 0۱/۲0۵۲61۳6 برگرداند (6 6۳۲۱۴6 ‎CMyDateTime CMyDateTime::Diff(const‏ * تابعي که حاصل جمع زماني شي و شي ورودي را محاسبه نموده و بصورت يك شي 0۷۲۵۵۲671۳06 برگرداند ‎CMyDateTime CMyTime::Add(const CMyDateTime &t)‏ * تابعي که يك شي ‎S19 485 prolyl, olpin | CMyDateTime gsi jl‏ مقدار آن بزركتر از يارامتر ورودي باشد مقدار 1 و اگر کوچکتر بود -1 و اگر برابر بودند مقدار 0 بر گرداند. ‎int CMyDateTime::Compare(const CMyDateTime &t) *‏ 44

صفحه 45:
45 مخرب ها(نابود کننده ها) ‎a‏ destructor

صفحه 46:
مخرب ها(نابود کننده ها) ‎of‏ 46 همان طور که وقتي يك شي براي اولين بار اجرا مي شود تابع سازنده آن احضار : مي‌شود با نابود شدن شيء نيز تأبع ديكري به نام تابع مخرب ‎(destructor)‏ به طور اتوماتیک احضار مي‌شود تابع مخرب همنام با سازنده (يعني همنام با کلاس) است اما قبل از آن علامت مد يعني - قرار میگیرد. * مخرب ها مانند سازنده ها مقدار بر گشتي ندارند و هیچ آرگوماني نیز نمي گیرند

صفحه 47:
مثالي از یک مخرب 1 class foo { private: int data; public: foo() : data(0) ‏3ع‎ ‎~foo() ‎{} ‎3

صفحه 48:
اشیاء به عنوان آر گومان هاي تابع مشخص شده است) void distance::add_dist (distance d2,distance d3) ~ inches=d2.inches+d3.inches; feet=0; if(inches>=12.0) inches-=12.0; feet++; + feet+=d2.feet+d3.feet; 48 1 2 3 4 5 6 7 8 9 {} void add_dist(distance ,distance); 1 مي توان از اشیاء به عنوان آر گومان ورودي یک تابع استفاده کرد به مثال زیر توجه کنید:(با رنگ قرمز class distance 1 private: int feet; float inches; public: distance() : feet(0),inches(0.0) {} distance(int ft, float in) : feet(ft), inches(in) i

صفحه 49:
با توجه به شماره هاي 7 الي 11 ستون اول مثال قبل متوجه مي شويم كلاس ‎distance‏ دو سازنده دارد دلیل وجود این دو سازنده اين است كه: مي خواهیم متغیر هايي از نوع 0150۳066 بدون مقدار دهي اولیه به آن ها تعریف کنیم (شماره 7وع) مي خواهيم متغير هايي كه از نوع ‎gly distance‏ اولين بار ایجاد کنیم مقدار جایگزین کنیم (شماره هاي 9و10و11)

صفحه 50:
بر گرداندن اشیاء از توابع * تابع ا5أه_300) که در مثال قبل تعریف کردی را مي توانیم به صورت زیر تعریف کنیم در اين صورت مقدار بر ‎at ol‏ یک شیء می‌باشد distance temp; temp.inches=inches + d2.inches; 3 if(temp.inches>=12.0) ۱ ‏چون نوع‎ | { ‏رميوكردلند نوع بركشتولين‎ »— distance ! ۱ temp.inches-=12.0; ۱ ‏هم مي باشد واين تابع شيء‎ ev! ۱ | 052066 رابه ۰ شي 02 لضافه میکند ‏ ! ‎temp.feet=1;‏ ‏گرداند_ \ 1 temp.feet+=feet+d2.feet; return temp; 50

صفحه 51:
void distance::Display() 1 cout<<"\n feet="<<feet; cout<<"\n inches="<<inches<<endl; void main() 1 distance d1(1,2),d2(5,6); distance d3,d4; d3. add_dist(d1,d2); 0401, 00 |_dist2(d2); cout<<"d3 is:”; d3. Display(); cout<<"d4 is:”; d4. Display(); getch(); ‏تا‎ ‎1 ‏تست‎ ‏تحايكانا‎ ‏ين‎ ‏تتا‎ inches =8 51

صفحه 52:
داده هاي كلاس ‎static‏ * اگر یک عنصر داده اي در یک کلاس به صورت ]5311 اعلان شده باشد صرف نظر از تعداد اشياء‌ي که از کلاس ساخته شده‌اند. براي متفیر عضو ‎gs Static‏ یک عنصر ایجاد مي‌شود. * براي یک عضو او کلاس حافظه جداگانه‌اي اخذ مي‌شود و تمامي نمونه هاي ساخته شده از کلاس به این متغیر دسترسي دارند و هر تغييري كه در اين نوع عضو داده اي ایجاد شود تمامي اشياء ديكر به آخرين مقدار دسترسي دارند " يك متغير عضو استاتیک بسیار شبیه به یک متغير سراسري است 52

صفحه 53:
int main() { foo f1,f2,f3; cout<<“count is:”<<fl.getcount(); cout<<“count is”<<f2.getcount(); cout<<“count is”<<f3.getcount(); count is:3 count is:3 count is:3 mal 5 #include<iostream.h> class foo { private static int count; public: foo() {count++} int getcount() {return count;} } foo:: count = 0;

صفحه 54:
شرح مثال 2 54 در این مثال کلاس00] یک عنصر داده اي به نام 00۴ ازنوع ‎Static‏ ‏دارد سازنده اين كلاس باعث مي شود ‎count‏ افزایش یابد در 0۳0۵1 سه شيء از كلاس 600 تعريف كرديم از آنجا كه سازنده سه بار احضار مي شود ۲00106 سه بار افزایش مي یابد و از آن جايي که داده ‎Count‏ از نوع 56261 مي باشد در نتيجه ‎ly‏ هر 3 شيءاي که تابع 601۴و احضار مي شود یک مقدار(يعني 3 را برمي گرداند اگردر این مثال از یک متفیر معمولي به جاي متفیر استاتیک استفاده مي کردیم مقداري که تابع اطدامع096 برمي گرداند براي هر سه تابع عدد 1 بود زیرا در هر شیء فقط یک بار به 0۱10۲ اضافه می‌شود

صفحه 55:
تمرین 5: ۴ يك کلاس براي نگهداري آرایه اي از نوع 00 به طول ‎!١‏ طراحي نمایید بطوري که ۲ تعداد عناصر لیست است و در سازنده طول آرایه وارد ميشود. در مخرب کلاس حافظه اختصاص يافته به سیستم بر گردانده میشود. class CList 1 public: Clist(int len); ~Clist(int len); int Getitem(int Idx); void SetItem(int Idx , int Val); privete: int *ptr; 1 55

صفحه 56:
توابع »51011 3 " توابع عضو نیز مي توانند»اه5 باشند اين ويژگي باعث مي‌شود که بتوان بدون ساخت یک شيء یک تابع را فراخواني كرد "" توابع 58311 تنها به متغير هاي عضو از نوع ©5]3]1 دسترسي دارند

صفحه 57:
class MyMath { ۱ public: static double SQUARE(double d) {return sqrt(d);} static double POW(double d,double n) {return pow(d,n);} 3; int main(int argc, char* argv[]) { cout<<"sqrt(100)= 10.0)<<endl; getch(); return 0; }

صفحه 58:
موردهاي کاربرد توابع و متفيرهاي + static در سیستم انتخاب واحد تمامی دانشجویان دروس ارائه شده در ترم را ميبينند و بايد اين اطلاعات بين همه مشترك باشد. 5 در سيستم حمل و نقل تمامي خودروها اطلاعات يكساني از مسيرها دارند. اكر كلاسي به صورت وسيله نقليه داشته باشيم ميتوانيم اطلاعات مربوط به خيابانها و تقاطعها را بصورت متغیر ‎static‏ تعريف نماييم در بازي فوتبال تمامي بازیکنان موقعیت توپ و مالك

صفحه 59:
توابع عضو 0151© 21 " تابع عضو 0105© تضمين مي كند كه هيج يك از داده عضو كلاس خود را تغيبر نمي دهد ۴ اگر بعد از اعلان تابع و قبل از بدنه آن کلمه كليدي ۲ قرار دهید آن تابع به یک تابع ثابت(20۳051) تبدیل مي شود = توابع عضوي كه كاري انجام نمي دهند اما داده ها رااز شيع دریافت مي کنند نامزدهاي خوبي براي 05۴ شدن هستند زیرا نمي خواهند هیچ داده اي را تفییر دهند * 00056 ساختریکقتاب بع کمکميک ند تاکامپایلر در صورت نیز پیغامهاي‌خا چاپک ند وب كاربر لطلاع ميدهد كه كه تابع نميخولهد جيزيرا در دلخلشيع آن‌تفییر دهد 59

صفحه 60:
مثال 2 class aclass { private: int alpha; public: void nonfunc(}————-+_//non-const member function 10۱093299: ‏مط‎ //01 void confunc() const__, _//const member function 131002299: + //6۲۲0۲: 69۳01] modify a member }; 60

صفحه 61:
const ‏اشیاء‎ 61 +_¥ * هر گاه یک شيء را به صورت ]60۳5 اعلان کنیم دیگر نمي توانیم آن شيء را تغيير دهيم بنابراين تنهااز توابع عضو 0051© مي توانيم استفاده كنيم زيرا تنها توابعي هستند كه تضمين ميكنند محتواي آن تغيير نمي كند

صفحه 62:
مثال void showdist() const { cout<<feet<<"\"<<inches<< } 1 int main() const distance football(300,0); football.getdist(); ۲ cout<<“football="; football.showdist(); //ok cout<<endl; return 0; 1 62 class distance { private: int feet; float inches; public: distance(int ft, float in) : feet(ft), inches(in) {} void getdist() cout<<“\n enter feet” ; cin>>feet; cout<<" enter inchest”; cin>>inches; }

صفحه 63:
98 ۲00102۱۱ که از تعریف کردیم از نوع ‎Const‏ ‏مي‌باشد. آن خط از برنامه که با رنگ سبز نمایش داده شده است باعث ایجاد 6۲۲0۲ مي شود زیرا تابع ا960[5 یک تابع عضو از نوع 6005 نمي‌باشد این در حالي است که چون تابع ‎Qshowdist‏ از نوع ‎const‏ مي‌باشد باعث ابجاد 6۲۲0۲ در برنامه نمی شود 63

جهت مطالعه ادامه متن، فایل را دریافت نمایید.
34,000 تومان