صفحه 1:
قالب ها
قالب یکی از ویژگی های قدرتمند زبان ()++ است.با استفاده از قالب ها می توان مجموعه کاملی از
تولبع مرتبط به هم (توابع همنام ) را که توابع قالب نام دارند یا مجموعه کاملی از کلاس های مرتبط به هم
را که کلاسهای قالب نامدارند مشخص کرد.
به عنوان مثال می توان قالب تابعی برای تابع مرتب سازی ارایه نوشت و ()++ به طور خودکار توابع
قالب دیگری را تولید کند که ارایه ایاز نوع صحیح یا ارایه ای از نوع اعشاری یا ارایه ای از رشته ها و
غيره را مرتب کند.
توابع همنام اعمال مختلفى را روى انواع كوناكونى از داده ها انجام مى دهند.اكر اين اعمال براى هر نوع
یکسان باشند با استفاده از قالب های تابع راحت تر انجام ميشوند.
به عبارت دیگر در توابع کلی یک عمل بر روی انواع مختلفی از داده ها انجام میشود.در () اين کار
توسط ماکروها انجام می شود اما ماکروهااثرات جانبی زیادی را ایجاد می کنند و کنترل نوع را نیز انجام
نمی دهند.اما قالب ها ی تابع کنترل نوع دقیقی راانجام می دهند.
صفحه 2:
A
با استفاده از قالب ها می توان توابع کلی و کلاس های کلی را ایجاد کرد.در یک تابع یا کلاس کلی نوع
دادهای که اين توابع و كلاس ها بر روی آن عمل می کنند به صورت پارامتر مشخص میشود.بن
می توانید ازیک تابع یا کلاس با چند نوع مختلف از داده ها کار کنید بدون اینکه نیاز به دستورالعمل
های خاص ان لنواع باشد.
توابع کلی:
تابع کلی مجموعه کلی از اعمال را تعریف می کند که بر روی انواع مختلفی از داده ها انجام می
شوند.نوع داده ای که تابع باید بر روی ان عمل کند به عنوان ارگومان به ان ارسال می شود.با تابع
کلی یک رویه کلی را می توان بر روی انواع مختلفی از داده ها انجام داد.
می دانید که بسیاری از الگوریتم ها بر روی انواع مختلفی از داده ها عمل می کنند بدون اينکه
تغییراتی درانها ایجاد شود.به عنوان مثال مرتب سازی مج باه.م» چه برای مرتب سازی ارایه
صحیح و چه برلی ارایه اعشاری یکسان است.فقط نوع دلده ای که مرتب می شوند متفاوت است.با
ایجاد یک تابع کلی می توانیدماهیت الگوریتم را مستقل از هر نوع داده ای تعریف کنید.به اين ترتيب
کامپایلر کد مناسبی را برای داده ای که در زمان اجرلی تابع مشخص می شود تولید می کند.به طور
کلی وقتی یک تابع کلی ایجاد مى كنيد مثل اين است که تابعی ایجاد می کنید که خودش را مجددا
تعریف می کند.
صفحه 3:
+ تابع کلی با کلمه ی کلیدی :#:,,,: ایجاد می شود.اين کلمه ی کلیدی قالبی را ایجاد مى كند كه عمل
تابع را مشخص میکند و جزئیات امر را به کامپایلر واگذار می نماید.شکل کلی تعریف تابع قالب به
صورت زیراست:
(لیست پارامترها)نام تابع نوع بركشتى template<class gs>
{
بدنه تابع
+ در اینجا نوع نامی است که مشخص می کند چه نوع داده ای توسط تابع مورد استفاده قرار می
گیرد.اين نوع در هنگام اجرای برنامه مشخص می شود.این نام ممکن است در تعریف تابع به کار
گرفته شود.وقتی کامپایلرنسخه خاصی از تابع را ایجاد می نماید نوع واقعی را در ان جا قرار میدهد.
مثال 4 :
برنامه ای که با استفاده از یک تابع کلی محتویات دو متغیر را با هم عوض میکند.
امسوم »> طعا
Shc <r hit
Yhewphie <chew X> vord ewer ®ree (X 8, X 8b)
ewe
صفحه 4:
۳ <<<
وک کرک > کیک > با رب اه جبی > کی"
(1 ,)سي سور
jure Pree bo)
jw Prep(ab)
>>> >>> زرا سک کهصز
> کرک > کبک > رو رب 9)”>كفجن"
کرک کی > a, ری )> >ی رس
اس(
© ممصن
صفحه 5:
خروجی
Ortpodt, 1:10 , OD
Ortged x, v0. , CE8.9
Ort در 9 و
0 ۱:60 ,سره
0.4 .99: برد لوق
Gwoped y, biz,
Ie ۱ ی ی
templat <class X> void swapArgs (X &a, X &b)
اين سطر به كامبايلر دو جيز رد مى كويد: |0.قالبى در حال ايجاد شدن است و ©.يك تعريف كلى اغاز
اشده است.
* در اینجا ۷( یک نوع كلى است.بس از بخش 4X 514825 gle! (JswapArgses templat
عنوان نوع داده هايى كه بايد با هم جابه جا شوند استفاده كرده است.در GS (MAIN QE
8105 با استفاده از سه نوع داده مختلف فراخوانى شد: 6۳3۲ , ove. int float
15 يك تابع كلى است كاميايلر سه نسخه از اين تابع را ايجاذ مى كند. يكى از انها دو
مقدار صحيح را جا به جا مى كند دومى مقادير اعشارى و سومى مقادير كاراكترى را جا به جا مى نمايد.
صفحه 6:
۰ نام دیگر تابع کلی (تابعی که با !رمم تعريف مى شود) تابع قالب است.تابع ج013 بد() را كه در
مثال دیدید به صورت زير نيز مى توان نوشت:
<trwpkie <ckew X
Ord suaBree (X BX &b)
و مر وق یک صاه شزوع شد و خطی که تابع را تعریف کرد
هیچ دستور دیگری نمی تواند ظاهر شود.
صفحه 7:
چند نکته:
۰_ در دستور ,7 میتوان بیش از یک نوع داده را تعریف کرد,در این صورت باید انها را با کاما از هم
جدا کرد.
+ گرچه تابع کلی در صورت نیاز به طور ضمنی خودش را دوباره تعریف میکند(به شکلهای گوناگون در
می اید) ولی به طور صریح نیز قابل تعریف مجدد است.در اینصورت این تابع مجددا تعریف شده تابع
کلی را نسبت به ان نسخه خاص پنهان می کند.
۰ علاوه بر اينكه تابع كلى را ميتوان مجددا تعريف كرد خود مشخصات )بوه را نیز می توان مجددا
تعريف نمود.براى اين كار نسخه ديكرى از قالب ايجاد كنيد كه با تمام انجه كه در ليست يارامترها امده
است متفاوت باشد.
۰ در تابع قالب می توان پارامترهای استاندارد را با پارامترهای کلی تعریف کرد عملکرد این پارامترهای
کلی همانند عملکرد انها در سایر توابع است.
+ توابع کلی می توانند کاربردهای متعددی دلشته باشند.اگر تابعی دلرای یک الگوریتم کلی باشد ميتوانيد ان
را به صورت تابع قالب در بیاورید.به اين ترتیب میتوانید ان را برای هر نوعی از داده ها به کار ببرید.
به عنوان مثال مرتب سازی عملی است که برای ان می توان توابع کلی را ایجاد کرد.در بسیاری از
الگوریتمهای مرتب سازی روش مرتب سازی برای انواع مختلفی از داده ها یکسان است.در اینجا تابعی
به نام «بارارارمرا() برای مرتب سازی حبابی انواع مختلفی از داده ها می نویسیم:
صفحه 8:
scope <chawe ype مسر bubble Type Moron بر سس ceed)
4
طبه ها یز
مت و
Por (3 =0; 0 <oownt ; ot +)
Por (b = pout —; b >= a; b— )
JP ( tes [b — (] > tows [b] )
ز wp = tows [b— dl]
[۲] سح < [) - ۲ عد ز
stews [b] = ewe
{
{
۰ روش چاپ محتویات ارایه ها به نوع داده هایی که دران وجود دارد بستگی ندارد.بنابراین این عمل با
استفاده از توابع قالب به راحتی انجام پذیر است.
صفحه 9:
کلاس های کلی یا قالب های کلاس:
علاوه بر توابع کلی کلاس ها را نیز می توان به صورت کلی تعریف کرد.در این صورت کلاسی ایجاد
میشود که تمام الگوریتم هایی را که توسط آن استفاده می گردد تعریف می کند.اما نوع واقعی که باید
مورد استفاده قرار گیرد هنگامی که اشیایی از ان کلاس ایجاد می شوند به صورت پارامتر مشخص
میگردد ,وقتی کلاس کلی ایجاد میشود عمل مورد نظر را میتواند بر روی هر نوع داده ای انجام دهد.
بر اساس نوعی که هنگام ایجاد شئ تعيين مى كنيد كاميايلر كد شناسايى را توليد مى كند.شيوه اعلان
كلاس كلى به صورت زير است:
] نام كلاس chew ١ حنوع داوس ان
در اين شكل كلى نوع هنكام ايجاد شئ مشخص مى كردد و نوعى را كه كلاس بايد بر روى ان عمل
نماید تعيين مى كند. در صورت لزوم مى توان بيش از يك نوع را تعيين كرد و انها را با كاما از هم
جدا نمود. وقتى كلاس كلى را ايجاد كرديد نمونه خاصى از ان كلاس را مى توانيد به طريق زير
مشخص كنيد:
< نوع > نام كلاس
در این شکل کلی نوع مشخص می کند که کلاس باید بر روی چه نوعی عمل کند و ماه شی از اين
کلاس است.توابع عضو کلاس های کلی خودشان به صورت کلی اند.
صفحه 10:
۰_با استفاده از قالب ها می توان کلاسی را طراحی کرد که بر روی انواع مختلفی از داده ها عمل كند.به اين
ترتیب حجم برنامه ها کاهش پیدا می کند و قابلیت انعطاف برنامه بالا می رود.از طریق قالب ها می توانی
يك كلاس كلى را تولید کنید که جایگزین بسیاری از کلاسها شود.انولعی که کلاسهای کلی بر روی انها
عمل می کنند هنگام ترجمه مشخص می شوند.
شکل 0:
‘publ
CAS Oat هر نوع اوليه اى را مى توان براى اين تابع عضو
صفحه 11:
شکل ©:
تعریف قالبی است که هنوز نوع داده مشخص نیست
<tewphie > وه ۲
(Pat) و > و
هد مدر
{
همانطور که در شکل میبینید تعریف سازنده کلاس مثل سایر توابع عضو است با اين تفاوت که قبل از
سطری که تعریف میشود باید [/
اه > امس > را قرلر داد( شکل AC
برای تعریف تابع عضو کلاس باید قبل از تعریف آن ۳" سا" > مربب > را قرار داد( شکل 9)
صفحه 12:
شكل ©:
> اک سار P
0 اه سوت < > اس
۱
pont << “data = “<< data << pod
{
تا کنون کلاسی را تعریف کردیم که هر نوع داده ای را به عنوان عضو خودش می پذیرد.در برنامه اصلی
بايد مشخص كنيد كه كلاس بايد لز چه نوعی باشد.در شکل ۳ نوع :۲ را برلی کلاس در نظر می
كيريم.براى اينكه اين كلاس رد به کلاس نو ع کاراکتری یا نوع :۱47,۸7 تبدیل کنیم مانند شکل ( عمل می
صفحه 13:
( 66« <> طسو
ده
كلاس كلى را يه كلاس نوع كاراكترى OS ee Ui
;Dsxople < char > y('P*)
double > 2 (2S ) > او
“Se
كلاس كلى را به كلاس نوع حاطحك تبديل مى 36م
صفحه 14:
مثال ©:
برنامه اى كه با تعريف يك كلاس كلى بر روى لنواع مختلفى از داده ها عمل مى كند.
<totrra hit اسه
tok <ponib kit
Doro <P > 1: Dokople (Ts)
}
jos =o
{
<ewphte <chew T
)( لوص Toop <P > 2: show
/
صفحه 15:
6 ۶
© دير
©2066
صفحه 16:
چند نکته :
٠ كلاس كلى می تواند بیش از یک نوع داده کلی داشته باشد.برای این منظور باید تمام انواع مورد نیاز را
در مشخصات ابو ذکر و انها را با کاما از هم جدا کرد.
۰ در مشخصات قالب کلاس کلی می توان ارگومان هایی تعریف کرد.شیوه تعریف این ارگومان ها مانند
تعریف ارگومان ها در توایع معمولی لست.
۰ کلاس قالب می تواند ارگومان پیش فرضی مربوط به نوع کلی داشته باشد.به عنوان مثال قالب زیر را در
نظر بگیرید:
او اه < وا ماک ماوت (
{
اگرهنگام ایجاد شینی از کلاس 7( )/«:» نوعی مشخص نشود نوع ۲۷ منظور خواهد شد.ارگومان های
کلاس کلی نیز می توانند پارامتر های فرضی داشته باشند «در اینصورت چنانچه هنگام ایجاد شينى از ان
کلاس مقداری برای ان پارامتر ها مشخص نشوند فرضی مورد استفاده قرار می
صفحه 17:
9. قالب ها و ورائت :
قالب ها و ورائت به شکلهای گوناگونی با هم ارتباط دارند :
قالب کلاس می تواند از قالب کلاس دیگر مشتق شود.
قالب كلاس مى تواند از كلاس غیر قالب مشتق شود.
كلاس قالب می تواند از قالب کلاس مشتق شود.
كلاس غير قالب ميتواند از قالب کلاس مشتق شود.
<6. قالب ها و كلاس هاى دوست :
همانطور که می دانید کلاس ها و توابع مى توانند دوست كلاس هاى ديكر تعريف شوند.در قالب هاى
كلاس نيزنوعى رابطه دوستى را مى توان ايجاد كرد.دوستى را مى توان بين قالب كلاس و تابع عمومى يا
تابع عضوكلاس ديكر يا حتى يك كلاس كامل ايجاد كرد.
در قالب کلاس که به صورت زير تعریف شده است
<chos T> ches X ارم
اعلان رابطه دوستی به صورت زیر
vod Pd سیب( :
موجب می شود تا 30| با هر کلاس قالبی که از قالب کلاس قبلی ایجاد می شود دوست باشد.
صفحه 18:
©. قالب ها و اعضای استاتیک :
+ همانطور که می دانید در کلاس های معمولی عضو داده ای استاتیک بین تمام اشیای آن کلاس مشترک
است و عضو داده ای باید به عنوان حوزه فایل مقدلر اولیه بگیرد. هر کلاس قالب که از قالب کلاس ایجاد
شد عضو داده ای استاتیک مربوط به قالب کلاس خود را داراست تمام اشیای لن کلاس قالب در آن عضو
داده ای مشترک خواهند بود.حوزه انها نیز در فایل است.هر کلاس قالب کپی مخصوص به خود را از
توابع عضو استاتیک مى كيرد.
9 کلاس های قالب و پردازش ساختمان ها :
۰ ساختمان ها انواع جدیدی اند و تعداد عناصر انها متغیر است.در نگاه اول به نظر می رسد که هر ترکیبی
رادر یک قالب نمی توان به کار برد.قالبی که ساختمان را پردازش می کند مانند قالبی است که انواع اولیه
را پردازش می کند.اما باید در خارج از قالب فکر جدیدی کرد.عملگر >> را باید برای ساختمان مجددا
تعریف کرد.در اینصورت قالب داده های موجود در ساختمان را به 4ب ارسال می کند. نوشتن كلاس
قالب ساختمان ساده است در واقع مثل کلاس قالب انواع اولیه است ولی با اندکی تغییر :
صفحه 19:
10) vort show
1
دراين كلاس !: يك عضو داده اى است كه نوع ان مشخص نيست .سازنده ©2171 یک پارامتر
دارد كه نوع ان در برنامه اصلى مشخص مى شود.تابع عضو ,.»»!:() محتويات |: را در صفحه نمايش
ظاهر مى كند.اما بخش مهم كار با اين كلاس تعريف مجدد عملكر >> است كه محتويات ساختمان را به
خروجى مى برد.اكنون ساختمان زير را تعريف مى كنيم :
يس از تعريف ساختمان به تعريف مجدد عملكر >> مى يردازيم ( شكل © ).
صفحه 20:
\
Be) ما مسق سیر
}
S{ “>> sro << ی
p 8 >> strpu << qagqe
S88 >> strou << height
pretura stro
{
صفحه 21:
مثال © :
برنامه ای که با کلاس قالب ساختمانی را پردازش می کند.
( جا Boperdor << (roreuw Sor_mu, dic &y)
وه ز << quan << tb
vp << quae << ib
Lt << ghokht << oud
joka sip
//
صفحه 22:
طاطم :
(Ta) یس
:) ( لحم eho
if
نوم وین همم مممممی
7 > صابسی>
} Deowkope <P > 2: Patstope (Po)
ies
{
۲ سب عاب >
) ( میت لخم > 2 < show
}
ood << >> نحو
{
یوم منونمم
//
YQ) tt wat
اه () ز
nat )مس مد , ۵0, 2۵ }
i Dewtenopbe <ckta> دم
صفحه 23:
خروجی
ars 66
پردازش استثنا ها
۰ قابلیت توسعه ()++ می تواند انواع و تعداد خطاهایی را که اتفاق می افتد انزلیش دهد.ویژگی هایی که
در اینجا لرائه می شوند باعث می شوند تا برنامه نویس بتواند برنامه هایی بنویسد که قدرتمند عاری
خطا وتحمل کننده عیب ها باشند.سیستم هایی که با این ویژگی ها نوشته شدند نتایج مثبتی را ارائه کرده
شتا مدگابی که حطایی بز EO ENE SAL داز زوا کل
ترل خطا به ماهیت و اندازه سیستم های نرم افزاری بستگی دارد.در بعضی از
جاری بايد كد کنترل خطای زیادی وجود داشته باشد.
ل خطا وجود دارد.معمولا کدهای کنترل خطا در سراسر کد سیستم پراکنده
اند.خطاها در جاهایی که اتفاق می افتند تحت کنترل قرار می گیرند.امتیازاین روش این است که برنامه
نویسی که کد رامی خواند کنترل خطا را در نزدیکی ان مشاهده می کند و متوجه می شود که لیا کنترل
خطای مناسبی پیاده سازی شده است یا خیر.
٠ ابزارهای زیادی برای
صفحه 24:
مشکل این روش این است که کد سیستم با پردازش خطا درهم می امیزد و از حالت یکنواختی خارج می
شود.این کار موجب می شود تا خواندن برنامه جهت پی بردن به صحت کامل ان مشکل شود. علاوه بر این
درک و نگهداری کد دشوار خواهد شد.
بعضی از استثناهای متداول عبارتند از: عدم موفقیت عملگر ,۷« جهت تخصیص حافظه , خروج از حد
ارايه , سر ريز در محاسبات , تقسیم بر صفر , و پارامترهای نامعثبر تابع.
ویژگی های جدید ()++ در پردازش استثنا برنامه نویس رد قادر می سازد تا کد کنترل خطا را از متن
برنامه جدا کند و به این ترتیب به خوانایی برنامه بیا فزاید.با ویزگی های پردازش استثنا در 01+ می
توان تمام استثناهای مربوط به یک نوع خاص یا تمام استثناهای انواع مرتبط را تشخیص داد.به اين ترتیب
احتمال اينکه برنامه نتواند خطایی را تشخیص دهد کاهش می یابد.
پردازش استقنا موجب می شوند تا برنامه نویس خطاها را تشخیص دهد و انها را تحت کنترل در بیاورد تا
موجب اشکالاتی در برنامه نشوند.اگر برنامه نویس نتواند خطاهای مهم را پردازش کند برنامه خاتمه می
یاید.
پردازش استثنا برای کنترل خطاهای همگامی مثل تقسیم بر صفر طراحی شده است.با پردازش استثنا قبل
ازاینکه برنامه عمل تقسیم را انجام دهد مقسوم عليه را كنترل مى كند و در صورتى كه مقسوم عليه
صفرباشد استثنايى را صادر مى نمايد.
پردازش استثنا در وضعيت هايى مورد استفاده قرار مى كيرد كه اكّر خطايى موجب استثنا شد سيستم
بتواند ترمیم شود.روند ترمیم را پردازش استثنا گویند.به خصوص در مواردی که برنامه نتواند ترمیم شود
ولی لازم است به طرز خوبی خاتمه یابد پردازش استثنا ابزار مفیدی است.
صفحه 25:
A
اصول پردازش استثناها :
پردازش استثناها در ()++ با سه کلمه کلیدی رر«ها, ات ,روا انجام می شوند.دستورالعمل هایی
که ممکن است تولید خطا کنند و موجب بروز استثنا شوند در بلوکی به نام ,(م قرار می گیرند.پس از
هر بلوک ,رب یک یا چند بلوک 7 قرار می گيرد.
هر بلوک »اب حاوی یک پردازشگر استثنا است.اگر استثنا با یکی از پارامترهای موجود در بلوک
های »اب مطابقت داشته باشد کد مربوط به ان بلوک ابوس اجرا می شود.
بنابراین ممکن است بیش از يك بلوك + براى هر بلوكه ,رب وجود داشته باشد ونوع استثنا
مشخص می کند که کدام بلوک »,7 باید اجرا شود.اگر استثنایی به وجود نیاید و یا خطایی در
بلوک,ب رخ ندهد هیچ بلوک ام اجرا نمی شود.
اگر در بلوک ,وم خطایی اتفاق افتد استثنایی توسط دستور ,,رب«) صادر می شود.این دستور به
صورت زیربه کار می رود :
موه تا
این دستور استثنایی را که در جلوی ان با ۷:۷۷ (عملوند ) مشخص شده است صادر می کند.استثنا
باید در بلوک ,بر یا تبعی که در داخل بلوک ,وب جرا می شودصادر گردد.عملوند. ,رو می تواند
از هر نوعی باشد.اگر یک شی باشد لن را شی استثنا مى ناميم .به جاى شئ مى توان يك عبارت
صفحه 26:
بلوک را :
شکل کلی استفاده از بلوک ,م به صورت زیر است :
yi
}
بدنه بلوک
+ بلوک حاوی دستورالعمل هایی است که ممکن است در اثر بروز خطا استثنایی را صادر کند.دقت
داشته باشید که بلوک ,» می تواند حاوی چند دستو اندک در داخل یک تابع یا کل دستورالعمل هأی
موجود در تابع ۷۷( ) باشد.
بلوك «إصادس :
از هر بلوك ,ره بايد يك يا جند بلوك دم قرار داشته بشد تا استثاها را پردازش كنند .به عبارت
دیگر پردازشگر تناها در بلوک ایح GRAIL LS کلی بلوک ره به ضورت زیر است *
) ( بارامتر نوع 0 ) ات
بدنه بلوك
1
) (بارامتر نوع © ) اه
بدتة يلوك
صفحه 27:
) (پارامتر نوع») .. park
بدنه بلوک
بلوک اب در ارگومان خود نوع شینی را که باید پردازش استثنا در ان اجرا شود مشخص می
کند.پارامتر موجود در پردازشگر :4 می تواند فاقد نام باشد.اگر پارامتر دارای نام باشد می توان در
داخل بلوک ب,, به ان مراجعه کرد.اگر پارامتر فاقد نام باشد مثلا فقط نوع پارامتر مشخص شده باشد تا
تطابقان با نوع شینی که پرتاب شد انجام شود فقط کنترل از نقطه پرتاب به پردازشگر منتقل می شود.این
حالت برای بسیاری از استثناها قابل قبول است.
ایی که شی شده ان با نوع ارگومان در GLY pairs Bal) باشد پردازشگر استثنای موجود
در آن بلوک او اجرا می شود. بلوک تم به صورت زیر نیز قابل استفاده است :
(je ای
بدنه بلوک
مفهوم این بلوک اين است که تمام استثناها را می پذیرد.توجه داشته باشید که اگر چند بلوک #7 را به
اینشیوه به كار مى بريد اين شیوه را باید به عنوان اخرین بلوک در نظر بگیرید.اشکالی که اين روش
کاربرد دارد اين است که نمی توانید مطمنن شوید که لستثنا از چه نوعی است.ممکن است چند پردازشگر
استثنا با نوع استثنایی که پرتاب شد مطابقت داشته باشند.در این حالت اولین انها اجرا می شود.
صفحه 28:
اگر چند پردازشگر استثنا با استثنای پرتاب شده مطابقت داشته باشند و هر کدام از انها استثنا رابه روش
خاصی پردازش کند ترتیب پردازشگر های استثنا شیوه پردازش ان را تحت تاثیر قرار می دهد.
نوع پارامتر پردازشگر اب در موارد زیر با شی پرتاب شده
وقتی از یک نوع باشند.
پارامتر پردلزشگر بابي., کلاس پایه عمومی از کلاس شی
ازشگر نوع اشاره گر پایه یا مرجع و شی پرتاب شده نوع اشاره گر یا مرجع كلاس مشتق
پارامتر پر
باشد.
پردازشگر »ابوبم به صورت ابو (...) باشد.
صفحه 29:
: نمی تواند به شیای اتوماتیکی که در بلوک ,,به تعریف شدند دسترسی داشته باشد زیرا
وقتى استثنا اتفاق مى افتد بلوك yy خاتمه می یابد و تمام اشیای اتوماتیک موجود در بلوک ,رم قبل از
اجرای پردازشگر استثنا از بين مى روند.
۰ اگر استثنایی در پردازشگر استثنا رخ دهد استثنای اول در پردازشگر استثنا پردازش می شود لذا
بايد در خارج از بلوکی که استثنای اول پرتاب شد
۰_با استفاده از دستور ۱« در پردازشگر -, نمی توان به نقطه پرتاب استثنا برگشت .دستور ۲۳۸۵۰
موجب می شود تا کنترل به تابعی برگردد که تابع حاوی بلوک هس را فراخوانی کرده است.
۰ _برای هر بلوک ,رب می توان بیش از یک بلوک #7 در نظر گرفت.
۰ هنگامی که مى خواهيد هم استثناهاى نوع كلاس بايه و هم استثناهاى كلاس مشتق را بردازش كنيد ابتدا
بلوک های ام مربوط به کلاس مشتق را قرار دهید.در غیر اين صورت بلوک :74 مربوط به
كلاس يايه مى تواند با تمام کلاس های مشتق تطابق داشته باشد.
صفحه 30:
استثناهایی را که توابع میتوانند پرتاب کنند می توان محدود کرد.به عبارت دیگر می توان کاری کرد که
توابع هر نوع استثنایی را پرتاب نکنند.برای اعمال این محدوديت بايد يك بلوک ,بورم« به تعریف تابع
اضافه کنید.شکل کلی آن به صورت زیر است :
( ليست انواع ) tow ( لیست ارگومان ها ) نام تابع نوع تابع
بدنه بلوک
به این ترتیب فقط استثناهایی که انواع انها در جلوی ,مربب در پرانتز امده اند توسط تابع میتوانند پرتاب
شوند .اگر استثناهای دیگری پرتاب شوند برنامه خاتمه می یابد.اگر نخواهید تابعی استثنایی را صادر کند
لیست انواع را ذکر نکنید.
اگر سعی شود استثنایی صادر گردد که توسط هیچ تابعی
اسسمسس() اجرا می شرد.اين تابع به نوبه خود تایع ,ساب( ) را فراخوانی می کند و برنامه را خاتمه
می دهد
صفحه 31:
مثال :
برنامه ای که استتنای تقسیم بر صفر را پردازش می کند.
<tohde <boreaw hit
ال مرس fern,
سس 0۳۲(
حاطم :
to bith: by zero") سم ست : [اسسة ()
( مم منخص) اممه () اجنة عدا ور
و :
یه char ایو
0ك
Orble wwe (lt سح م , ححص (
/
P عد سم 0(
[Olen deere
(ططط) میدز (ourercior) | dooce
{
/
( 019 د
pt مد , a
فصر الط ز
صفحه 32:
حيصف نها 0 ک> ف : :
( مه << امه << (ct ات [
۶ 00 : جح سنط ۵
The quoted :ص 06.6666
Goer ow riepre 1100 O
Ciera teil awed 6 Sake و
1 Cuter tow وه