1 / 32

بسم الله الرحمن الرحیم

بسم الله الرحمن الرحیم. برنامه سازی پیشرفته 2 مدرس : ناصر خنجری. اهم مطالب این درس. 1- کلاس ها و اشیا 2- وراثت 3- سربارگزاری هملگرها 4- چند ریختی 5- قالب ها 6- فایل ها امتحان 15 نمره پروژه 5 نمره تمرینات کلاسی + جزوه + حضور در کلاس. نحوه ارزشیابی. فصل اول

turi
Download Presentation

بسم الله الرحمن الرحیم

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. بسم الله الرحمن الرحیم برنامه سازی پیشرفته 2 مدرس : ناصر خنجری

  2. اهم مطالب این درس • 1- کلاس ها و اشیا • 2- وراثت • 3- سربارگزاری هملگرها • 4- چند ریختی • 5- قالب ها • 6- فایل ها • امتحان 15 نمره • پروژه 5 نمره • تمرینات کلاسی + جزوه + حضور در کلاس نحوه ارزشیابی

  3. فصل اول کلاس ها و اشیاء جلسه اول

  4. اصول و مفاهیم موجود در برنامه نویسی شی گرا: • 1- کپسوله کردن (Encapsulation): یعنی پنهان سازی جزئیات پیاده سازی از دید کاربران. • مثل)سیستم تلفن از زمان اختراع تا کنون تغییرات زیادی داشته است اما شماره گیری همچنان ثابت باقی مانده است. • 2- وراثت (inheritance):به این معنی که اشیائی را از روی اشیاء موجود ایجاد نماییم به طوری که ویژگی های آن شئ را در خود داشته باشد (به ارث ببرد) و همچنین ویژگی های مخصوص خود را نیز داشته باشد • مثل) دانشگاه را در نظر بگیرید اشیائی که در آن وجود دارند عبارت است از دانشجو استاد و کارمند این عناصر دارای ویژگی های مشترک نام ، نام خانوادگی ، ش.ش ،ت.ت و... هستند. که می توانیم این ویژگی های مشترک را در قالب یک مفهوم به نام کلاس اعضا قرار دهیم.همچنین هر یک از این عناصرویژگی هایخاص خود را نیز داشته باشند که در شکل روبرو مشخص شده است. نام ، نام خانوادگی ، ش.ش ، ت.ت اعضای دانشگاه دانشجو استاد کارمند ش.د مدرک شماره پرسنلی

  5. 3-چند ریختی(polymorphism): این مفهوم بیشتر در وراثت ماربرد دارد و به معنای یک چیز بودن و چند شکل داشتن است. • مثل) اثر انگشت که از والدین به ارث برده می شود یک ویژگی مشترک بین فرزندان و والدین است. اما شکل آن متفاوت می باشد. • الگوریتم برنامه نویسی شئ گرا:1-پیدا کردن اشیاء 2- ایجاد کلاس ها 3- تعریف توابع مربوط به هر کلاس 4- ایجاد اشیائی از کلاس 5- فراخوانی آن ها در برنامه اصلی

  6. : (Classکلاس ( • تعریف) مجموعه ای از متغیرها و توابعی است که بر روی این متغیر ها عمل می کند.به متغیر ها اعضا داده و به توابع متد گقته می شود. • مثل) کلاس مستطیل را در نظر بگیرید اعضای داده آن عبارتند از: طول و عرض و متد های آن عبارتند از محیط و مساحت. • نحوه تعریف کلاس: به صورت زیر می باشد. class } ;متغیر ها و توابع خصوصی Private: ;متغیر ها و توابع خصوصی Publice: ;متغیر ها و توابع عمومی Protected: ;متغیر ها و توابع محافظت شده } ; • متغیرهای خصوصی: این متغیر ها فقط توسط اعضا قابل دستیابی هستند و سایر کلاس ها و توابع نمی توانند از ان ها استفاده کنند. • متغیرهای عمومی: در سراسر برنامه قابل دستیابی اند. • متغیر های محافظت شده: این نوع از متغیر ها در وراثت مورد استفاده قرار می گیرند که در ادامه توضیح خواهیم داد.

  7. چند نکته در مورد متغیر ها: • نکته 1) اگر نوع دستیابی مشخص نباشد به طورخودکار private: در نظر گرفته می شود. • نکته2) هنگام تعریف کلاس ها بهتر است متغیرهای خصوصی و توابع را عمومی تعریف کنیم. • پس از تعریف کلاس باید بدنه توابع مربوط به ان کلاس را تعریف نمایید که به صورت زیر می باشد. (لیست پارامتر ها) نام تابع :: نام کلاس نوع تابع } دستور 1 … دستورn { نوع تابع: نوع داده ای را مشخص می کند که باید تابع برگرداند اگر تابع هیچ مقداری را برنگرداند نوع آن void خواهد بود همچنین نام تابع ازقوانین نام گزاری متغیر ها تبعیت می کند.

  8. :(Objectشئ ( • تعریف: به یک نمونه از یک کلاس object گفته می شود. • پس از تعریف متد ها باید یک object از کلاس مورد نظر را ایجاد نماییم تا بتوانیم به اعضای آن دسترسی داشته باشیم. • نحوه تعریف شئ یا object : : نام شئ نام کلاس • نحوه دسترسی به اعضای کلاس: : (پارامترها) نام متد نام شئ

  9. مثال) مثال برنامه ای بنویسید که با استفاده از یک کلاس شعاع دایره را از ورودی خوانده و محیط و مساحت آن را محاسبه نماید. • راهنمایی: باید کلاس برای دایره ایجاد نماییم و متدهایی برای خواندن شعاع از ورودی و چاپ محیط و مساحت بنویسیم. } ///////////////// void main () { circle cr; cr.input(); cr.output(); getch(); } void circle::input() { cout<<"please enter r:"; cin>>r; } ///////////////// void circle :: output() { cout<<"p"<<2*3.14*r<<endl; cout<<"g"<<3.14*r*r<<endl; #include<iostream.h> #include<conio.h> class circle { int r; public: void input(); void output(); }; ////////////////

  10. تمرینات منزل • 1- برنامه ای بنویسید که با استفاده از کلاس ها محیط و مساحت یک مستطیل را محاسبه کند. • 2- برنامه ای بنویسید که با استفاده از کلاس ها اعمال یک ماشین حساب را انجام دهد.(÷،×،-،+) پایان جلسه اول

  11. کلاس ها و اشیاء جلسه دوم

  12. نحوه تعریف توابع : • 1- الگوی تابع را قبل از main به صورت زیر تعریف می کنیم. ; (لیست پارامترها) نام تابع نوع تابع • 2- الگوی تابع را بعد از main به صورت زیر تعریف می کنیم. ; (لیست پارامترها) نام تابع نوع تابع } دستور1 … دستورn } نکته) اگر طول تابع زیاد نباشد داخل کلاس تعریف می کنیم ولی اگر طول تابع زیاد باشد خارج از کلاس و جدا تعریف می کنیم تا خوانایی برنامه بیشتر شود.

  13. :(constructor)سازنده • تعریف) تابعی است هم نام با کلاسی که در آن تعریف می شود که هنگام ایجاد اشیایی از کلاس به آن ها مقدار اولیه می دهد سازنده ها موجب کارایی بیشتر برنامه شده و از به وجود آمدن برخی از خطاها جلوگیری می کنند. • نکته) سازنده هیچ مقداری را بر نمی گرداند و نوع آن نیز مشخص نمی باشد. • مثال) void output(); { cout<<“x=“<<x<<endl; cout<<“y=“<<y<<endl; } }; #include<iostream.h> #include<conio.h> class test { intx,y; public: {x=10 , y=20;} void main () { test t; t.output(); }

  14. سازنده های پارامتردار: • تعریف) مقدار اولیه متغیر های کلاس را می توان در قسمت main برنامه تعیین نمود . در این صورت باید از سازنده های پارامتردار استفاده نماییم که نحوه ی مقداردهی نیز به صورت زیر خواهد بود ; (..., مقدار پارامتردوم و مقدار پارامتراول) نام شئ نام کلاس -1 test t(10,20);(مثال ;(..., مقدار پارامتر دوم , مقدارپارامتراول) نام کلاس = نام شئ نام کلاس -2 test t=test(10,20);(مثال • نکته) اگر سازنده فقط دارای یک پارامتر باشد مقداردهی آن را به صورت زیر می توان انجام داد. ; مقدار = نام شئ نام کلاس • مثال) #include<iostream.h> #include<conio.h> class test {intx,y;

  15. public: test(inti,int j) {x=I ;y=j;} Void output() {cout<<“x=“<<x<<endl; cout<<“y=“<<y<<endl;} }; Void main() {test t(10,20); یا test t=(10,20); t.output(); };

  16. :(destructor)مخرب • تعریف) تابعی هم نام با کلاسی است که در آن تعریف می شود و با علامت ~ شروع می شود. هنگامی که اشیاء کلاس از بین رفتند تابع مخرب آن ها فراخوانی می شود تا فضای اشغال شده توسط اشیاء آزاد شود و یا به عبارت ساده تر کار تابع مخرب آزاد سازی حافظه اشغال شده توسط اشیاء می باشد. • مثال) #include<iostream.h> #include<conio.h> class test {intx,y; public: test() {x=0;} ~ test(); void output() { cout<<“x=“<<x<<endl; } }; void main() { test t; t.output(); };

  17. مثال) برنامه ای بنویسید که با استفاده از کلاس ، عملکرد 24 ساعته یک ساعت دیجیتال را شبیه سازی نماید. برنامه باید زمان را در قالب زیر نمایش دهد. #include<iostream.h> #include<conio.h> int main () { inth,m,s,i; for (h=1;h<=60;h++) for (m=1;m<=60;m++) for (s=1;s<=60;s++) for (i=1;i<=1000;i++) cout<<h<<":"<<m<<":"<<s<<"\r"; getch(); }

  18. تمرینات منزل • کلاسی برای محاسبات کسری ایجاد نمایید سپس توابع لازم برای انجام چهارعمل اصلی بر روی اعداد کسری را بنویسید برنامه باید نتایج را به صورت کسری نمایش دهد همچنین قابلیت ساده سازی را در صورت ساده شدن داشته باشد. پایان جلسه دوم

  19. کلاس ها و اشیاء جلسه سوم

  20. تمرین کلاسی • کلاسی برای یک فروشگاه ایجاد نمایید که شامل سه کالا با مشخصات نام کالا ، کد کالا وقیمت آن می باشد برای این سه کالا مقداردهی را انجام داده و در برنامه چاپ نمایید. • راه حل اول) { cout<<“name:”; gets(name); cout<<“id:”; cin>>id; cout<<“price:”; cin>>price; } Void output() { cout<<“---------------”<<endl; #include<iostream.h> #include<conio.h> #include<stdio.h> class store { char name[16]; intid,price; public: store(){}; ~store(){}; void input() Puts(name); cout<<id<<endl; Cout<<price; } }; Void main() { Store s; For (int i=1;i<=3;i++) {

  21. cout<<“please enter info of goods number”<<i<<“:”; s.input(); s.output(); } }; • توضیح) برنامه فوق درست بوده اما از سازنده در ساده ترین حالت استفاده شده است. در راه حل دوم تابع input() را از برنامه حذف خواهیم نمود و مقادیر را از طریق سازنده به متغیرها ارسال خواهیم کرد

  22. راه حل دوم) cout<<“---------------”<<endl; Puts(name); cout<<id<<endl; Cout<<price; } }; Void main() { Store s(“pofak namaki”,1,2000); s.output(); Store s1(“chips”,2,3000); S1.output(); } #include<iostream.h> #include<conio.h> #include<stdio.h> class store { char name[16]; intid,price; public: store(char name1[16],int id1,int price1) Id=id1 Price=price1 Strcpy(name,name1); }; ~store(){}; Void output() {

  23. توابع ورودی(یادآوری): • 1- cin : این تابع برای خواندن یک مقدار از ورودی به کار می رود و خواندن تا زمان رسیدن به اولین space و یا Enter ادامه خواهد کرد.درکتابخانه iostream.h قرار دارد. 2- gets() : این تابع برای خواندن رشته ها به کار می رود وخواندن رشته تارسیدن enter ادامه پیدا خواهد کرد در کتابخانه ی stdio.h قرار دارد و نحوه استفاده از آن به صورت زیر است. ;(نام متغیر رشته ای)gets نکته) تابع gets کاراکتر (/0)Null را به طورخودکاربه انتهای رشته اضافه خواهد کرد. 3- cin.get: این تابع نیز برای خواندن ورودی به کار می رود و نحوه استفاده از آن به صورت زیر است. (تعداد کاراکتر هایی که باید خوانده شود ; نام متغیر رشته ای)cin.get مثال) خروجی تابع زیر چیست؟ Void main() {char s[10]; Cin.get(s,5); computer Cout<<s;} compu توابع ورودی

  24. توابع خروجی(یادآوری): • توابع خروجی (cout ,puts) : این توابع برای چاپ مقادیر در خروجی به کار می روند و تفاوت آن ها در این است که در تابع cout پس از چاپ مکان نما در همان سطر باقی می ماند اما در puts پس از چاپ مکان نما به سر سطر بعد منتقل می شود. • تابع strcpy() : این تابع برای کپی کردن یک رشته در رشته دیگر به کار می رود با فرض اینکه s1 و s2 دو رشته باشند خواهیم داشت. strcpy(s1,s2) می توند متغیریا ثابت باشد حتما باید متغیر باشد در نتیجه محتوای s2 به s1 کپی می شود و محتوای قبلی s1 از بین می رود.

  25. مثال) برنامه ای بنویسید که دو رشته s1 و s2 را از ورودی خوانده و s2 را درون s1 کپی کند. #include<iostream.h> #include<conio.h> #include<stdio.h> int main () { int i=0; char s1[21],s2[21]; cout<<“s1=“; gets(s1); cout<<“s2=“; gets(s2); while(s2[i]!=‘\0’) { s1[i]=s2[i]; i++; } s1[i]=‘\0’; cout<<“--------------------------------------------------”<<endl; puts(s1); }

  26. مثال) برنامه ای بنویسید که رشته را از ورودی خوانده و تشخیص دهد متقارن است یا نه؟ • راه حل) برای حل مسئله فوق باید ابتدا و انتهای رشته ورودی را داشته باشیم ابتدای رشته کاملا مشخص است بنابراین باید اندیس انتهای رشته را به دست آوریم و سپس محتوای اندیس های ابتدا و انتهای رشته را مقایسه نماییم در صورتی که تا انتهای مقایسه اختلافی وجود نداشته باشد رشته متقارن است. #include<iostream.h> #include<conio.h> #include<stdio.h> void main () {char s[21]; intI,j,k; //i=andiseebteda j=mohasebeyeenteha k=negahdarienteha int p==1 // motagharenastyana cout<<“s=“; gets(s); //mohasebeyeandiseentehayereshteh j=0; while(s[j]!=‘\0’) j++; //mohasebeyeinkereshtemotagharenast

  27. for(i=0,k=j-1;i<=k;i++,k--) if(s[i]!=s[k]) { p=0; break; } if(p==1) cout<<“motagharenast”) else cout<<“motagharennist”; } پایان جلسه سوم

  28. کلاس ها و اشیاء جلسه چهارم

  29. : (friend)تابع دوست یک کلاس • در برخی از مواقع لازم است که تابعی که متعلق به یک کلاس نیست به اعضای آن کلاس دسترسی داشته باشد در این حالت باید آن تابع را به عنوان دوست کلاس تعریف نماییم که برای این کار ابتدا الگوی تابع را داخل کلاس تعریف نموده با این شرط که در ابتدای الگو کلمه ی کلیدی friend را ذکر و سپس بدنه ی آن را خارج از کلاس تعریف می نماییم و در آخر نیز تابع را در برنامه اصلی فراخوانی می کنیم. • مثال) برنامه ای بنویسید که توسط یک تابع دوست جمع دو عضو کلاس را انجام دهد. Class test { inta,b; public: void input() { cin>>a>>b; } friend void sum(test t1); }; void main() { test t; t.input(); sum (t); } intmin(test t1) { cout<<t1.a+t1.b; }

  30. مثال) برنامه ای بنویسید که با استفاده از تابع دوست کلاس کوچکترین مقدار بین دو داده را پیدا نموده و در برنامه اصلی چاپ نماید. #include<iostream.h> class test { inta,b; public: void input() { cin>>a>>b; } friend int min(test t1); }; //////////// void main() { test t; t.input(); cout<<min(t); } ///////////////// int min(test t1) { if(t1.a<t1.b) return t1.a; else return t1.b; یا return t1.a<t1.b?t1.a:t1.b; }

  31. مثال) برنامه ای بنویسید که مشخصات 10 کتاب (نام کتاب، کد کتاب ، نویسنده و سال انتشار) را خوانده و چاپ نماید و قابلیت جستوجوی یک کتاب براساس کد کتاب را خوانده ؟ #include<iostream.h> #include<stdio.h> class book { char name[30],author[30]; intid,year; public: void input() { cout<<"book name:"; gets(name); cout<<"id:"; cin>>id; cout<<"author:"; gets(author); cout<<"year:"; cin>>year; } void output() { cout<<"book name:"<<name<<endl; cout<<"id:"<<id<<endl; cout<<"author:"<<author<<endl; cout<<"year:"<<year<<endl; } // friend int search(int key); }; book *b; void main()

  32. { inti,bid,n; cout<<"enter number of book:"; cin>>n; b=new book[n]; //book b[2]; //i=0; for( i=0;i<n;i++) { cout<<"enter a book info:"; b[i].input(); } cout<<"-------------book report------------"<<endl; for( i=0;i<=1;i++) b[i].output(); /*cout<<"enter id for search:"; cin>>bid; if(search(bid)!=-1) { b[search(bid)].output(); } else cout<<"not found"; */ } /*int search(int key) { for(int i=0;i<=1;i++) if(key==b[i].id) return i; return -1; }*/ پایان جلسه چهارم

More Related