1 / 44

برنامه نویسی پیشرفته جریان ها (streams)

برنامه نویسی پیشرفته جریان ها (streams). رئوس مطالب. کلاس های جریانی خطاهای جریانی ورودی خروجی دیسک با جریان ها مکان نمای فایل خطایابی در ورودی/خروجی فایل ورودی/خروجی فایل در توابع عضو سربارگذاری عملگرهای درج و استخراج استفاده از حافظه به عنوان شی جریان. کلاس های جریانی.

darin
Download Presentation

برنامه نویسی پیشرفته جریان ها (streams)

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. برنامه نویسی پیشرفتهجریان ها(streams)

  2. رئوس مطالب • کلاس های جریانی • خطاهای جریانی • ورودی خروجی دیسک با جریان ها • مکان نمای فایل • خطایابی در ورودی/خروجی فایل • ورودی/خروجی فایل در توابع عضو • سربارگذاری عملگرهای درج و استخراج • استفاده از حافظه به عنوان شی جریان

  3. کلاس های جریانی • جریان: دنباله ای از داده ها بین دو نقطه • ورودی/خروجی و برنامه • فایل و برنامه • فایل ها نوعی جریان اند • در C، کار با فایلها با توابع خاصی انجام می شد در C++ با استفاده از اشیاء خاصی انجام میشود. • دانستن سلسله مراتب کلاس های جریان مهم است چون توابع به ارث برده میشوند.

  4. سلسله مراتب کلاسهای جریان

  5. کلاس IOS • توابع عضو و داده های عضو این کلاس توسط تمامی کلاس های جریانی به ارث برده میشود • کلاس ios جد تمامی کلاسهای جریانی است و حاوی ویژگیهای اصلی که در کار با جریانهای C++ به آنها نیاز داریم. سه تا از مهمترین ویژگیها: • علامتهای فورمت بندی • بیتهای وضعیت خطا • وضع عملیات روی فایلهاست.

  6. علامتهای فورمت بندی ios • این علامتها مانند کلیدهای دو وضعیتی بصورت خاموش و روشن عمل می کنند. • چند روش مختلف برای مقداردهی به این علامات وجود دارد. • از آنجائیکه این علامات عضو کلاس ios هستند برای دسترسی به آنها از :: استفاده می شود. • مقدار دهی به علامات فورمت دهی • توسط توابع عضو کلاس ios یعنی setf و unsetf فعال و غیر فعال میشوند. • با استفاده از دستکاری کننده ها به آنها مقدار داد.

  7. علامتهای فورمت بندی ios

  8. دستکاری کننده ها • دستکاری کنند ها : دستورات فورمت بندی که مستقیماً به جریان اضافه میشوند. • عناصری از جریان هستند که قالب جریان در بعد از خود را عوض میکنند. • نمونه متداول آنها endl • تمامی علامات فورمت بندی را میتوان از طریق دستکاری کننده ها هم فعال یا غیر فعال کرد.

  9. دستکاری کنند ها (ادامه) • دستکاری کننده ها به دو صورت متفاوت ظاهر میشوند: • دستکاری کننده های بدون آرگومان • دستکاری کننده هایی که یک آرگومان میگیرند • cout << hex << var; Note that manipulators affect only the data that follows them in the stream, not the data that precedes them.

  10. دستکاری کنند های تک آرگومانی • بایستی سرفایل iomanipبه برنامه اضافه شود.

  11. توابع عضو کلاس ios • از این توابع عضو میتوان برای تنظیم علامتهای فورمت دهنده و کارهای دیگر استفاده کرد.

  12. istream • کلاس جریانی که عملیات مخصوص ورودی یا خواندن داده ها را انجام میدهد • توابع عضوی دارد هم درورودی از صفحه کلید و برخی در ورودی از فایل هم کاربرد دارد.

  13. OSTREAM • ostream: کلاس جریانی که با عملیات خروجی سروکار دارد. • توابع عضوی دارد هم در خروجی روی صفحه نمایش و برخی در خروجی روی فایل هم کاربرد دارد.

  14. ورودی و خروجی روی فایل

  15. اشیاء جریان از پیش تعریف شده

  16. خطاها در جریان ها • در هنگام ورودی/ خروجی از جریان ممکن است خطاهایی رخ دهد. • منتظر int هستیم کاربر حرف وارد کند. • بیت های کنترلی خاصی وجود دارد که وضعیت خطا را نشان میدهد • وضعیت این بیت ها را میتوان با استفاده از توابع عضو بررسی کرد یا تغییر داد. • توابع عضو مهم : eof() نشاندهنده پایان جریان، good() نشاندهنده عدم خطا در جریان و clear() برای پاک کردن بیت خطا هستند.

  17. بررسی خطا در جریان ورودی • مثال: ورودی از کاربر با استفاده از cin دریافت میشود.

  18. ورودی/خروجی از فایل • با استفاده از اشیاء سه کلاس ifstream، ofstream و fstream انجام میشود. به ترتیب برای خواندن از فایل، نوشتن در فایل و انجام هر دو کار. • انواع فایل • متنی / باینری • مراحل انجام کار با فایل • تعریف یک شی از نوع کلاس جریانی مناسب و مشخص کردن فایل مرتبط روی حافطه جانبی • خواندن/نوشتن از طریق جریان • بستن جریان • نقش مخرب

  19. ورودی و خروجی I/O برای فایل های متنی • در سازنده کافی است نام و مسیر فایل ذکر شود. • برای خواندن از کلاس ifstream برای نوشتن از ofstream استفاده میشود. • برای خواندن و نوشتن میتوان از عملگرهای << و >> استفاده کرد. • مخرب، فایل را می بندد

  20. رشته هایی با فاصله خالی میانی-(فایلهای متنی) • روش قبل برای رشته های char* که حاوی فاصله های خالی میانی هستند کار نمی کند. • برای کار با این رشته ها لازم است کاراکتر محدود کننده خاصی را پس از هر رشته بنویسید و با استفاده از getline() بجای عملگر ورودی آنها را بخوانید.

  21. فایلهای متنی • در هر خط فایل ورودی تعدادی عدد صحیح وجود دارد. برنامه مجموع اعداد هر سطر را نشان میدهد. 27 39

  22. فایلهای باینری • در سازنده علاوه بر نام و مسیر فایل، باینری بودن فایل در پارامتر دوم اعلام شود • برای خواندن از کلاس ifstream برای نوشتن از ofstream استفاده میشود. • برای خواندن و نوشتن میتوان از توابع write و read استفاده کرد. • Data آدرس عنصری که قرار است خوانده/نوشته شود • SIZE اندازه عنصر به بایت

  23. فایل های باینری- مثال • نوشتن آرایه در فایل و خواندن آن

  24. نوشتن و خواندن یک شی با فایلهای باینری-مثال • نوشتن شی در فایل و خواندن آن. • لزوم سازگاری موقع خواندن و نوشتن

  25. فایلهای باینری-مثال • نکته: اشیاء با عضو داده ای اشاره گر را نمیتوان مستقیماً در فایل نوشت. • چرا؟

  26. fstream • اشیاء fstream هم میتوانند بعنوان ورودی و هم بعنوان خروجی استفاده شوند. • با تابع عضو open میتوان ارتباط فایل را باز نموده و وضعیت آن را تعریف نمود • فایل میتواند چند و ضعیت داشته باشد که با هم OR منطقی میشوند.

  27. مکان نمای فایل • مکان نمای فایل : محل فعلی خواندن و نوشتن از فایل را مشخص میکند. • دو مکان نما داریم : برای خواندن و برای نوشتن • مقدار مکان نما تعداد بایت از ابتدای فایل را مشخص میکند. • توابع عضوی برای اطلاع از مقدار مکان نما و تغییر آن وجود دارد • tellp, getp, tellg, getg

  28. مکان نمای فایل-مثال

  29. خطا در فایل • روش برخورد و تشخیص خطاها در istream و ostream در اینجا هم کاربرد دارد (کلاس پدر)

  30. خطا در فایل

  31. خواندن/نوشتن یک شی در توابع عضو • برای خواندن و نوشتن در فایل باید از this استفاده کرد

  32. خواندن/نوشتن همه اشیاء یک کلاس در توابع عضو • میخواهیم بتوانیم کلیه اشیاء کلاس را با یک فراخوانی load و save کنیم • حداقل، نیاز به اعضای static داریم • عضو های داده ای static: تعداد اشیاء ساخته شده و آرایه ای از اشاره گر ها به آنها • توابع داده ای static: تابعی برای save و تابعی برای load

  33. مثال دفترچه تلفن

  34. ذخیره چند نوع شی در یک فایل • موقع نوشتن، قبل از هر شیء، کد شیء را هم ذخیره میکنیم تا موقع خواندن نوع شی ذخیره شده معلوم باشد

  35. ذخیره چند نوع شی در یک فایل • حتی میتوان اشیاء یک سلسله مراتب توارثی را هم با استفاده از چند ریختی ذخیره و بازیابی نمود. • موقع خواندن محتویات فایل با خواندن قسمت کد نوع شی و استفاده از عملگر typeid ، نوع شی بعد از آن را متوجه میشویم. کلاس پایه

  36. ذخیره اشیاء پایه و مشتق در یک فایل- ادامه • کلاس های مشتق

  37. ذخیره اشیاء پایه و مشتق در یک فایل-ادامه • تعریف توابع static در کلاس پایه

  38. ذخیره اشیاء پایه و مشتق در یک فایل-ادامه • توابع static خواندن و نوشتن در کلاس پایه

  39. ذخیره اشیاء پایه و مشتق در یک فایل-ادامه • main برنامه

  40. سربارگذاری عملگرهای >>و >> • عملگرها باید بصورت تابع friend سربارگذاری شوند چون عملگر در سمت چپ آنها قرار میگیرد. • خروجی عملگر ها باید istream& یا ostream& باشد. • قالب کلی برای << پارامترها و خروجی ها، باید نوع ارجاع باشند. قالب کلی برای >>

  41. سربارگذاری عملگرهای >>و >> • برای کار با cin و cout

  42. سربارگذاری عملگرهای >>و >> • سربارگذاری برای کار با ifstream و ofstream • سربارگذاری istream برای ifstream هم کار میکند • سربارگذاری ostream برای ofstream هم کار میکند • بخاطر چندریختی

  43. استفاده از حافظه به عنوان شی جریان • از یک آرایه کاراکتری میتوان بعنوان جریان استفاده کرد • معمولاً از کلاس strstream برای قالب بندی خروجی و ذخیره در یک رشته استفاده میشود. • strstream فرزند iostream است. • قالب کلی

More Related