C++ কাস্টম ব্যতিক্রম

C Kastama Byatikrama



C++ এ ব্যতিক্রম একটি মূল ধারণা। এক্সিকিউশনের সময় একটি ব্যতিক্রম ঘটে যখন প্রোগ্রামটি রানটাইম অসঙ্গতি বা অস্বাভাবিক পরিস্থিতির সম্মুখীন হয়। C++ এ, 'থ্রো', 'ট্রাই', এবং 'ক্যাচ' শব্দগুলি ব্যতিক্রম হ্যান্ডেল বা ধরার জন্য ব্যবহৃত হয়। 'থ্রো' কমান্ডটি ব্যতিক্রম তৈরি করতে ব্যবহার করা হয়। 'ট্রাই' শব্দটি ব্যতিক্রম ছুঁড়ে দেয়, এবং 'ক্যাচ' শব্দটি একটি ব্যতিক্রম পরিচালনার প্রতিনিধিত্ব করে যা 'থ্রো' শব্দটি দিয়ে তৈরি করা হয় এবং 'ট্রাই' বিভাগ দ্বারা নিক্ষেপ করা হয়। C++-এ ব্যতিক্রমগুলি প্রদর্শনের জন্য কিছু উদাহরণে ডুব দেওয়া যাক।

উদাহরণ 1: C++ এ একটি কাস্টম ব্যতিক্রম ক্লাস তৈরি করার প্রোগ্রাম

এই সাধারণ উদাহরণটি C++ এ কাস্টম ব্যতিক্রম পরিচালনা এবং সনাক্তকরণ প্রদর্শনের জন্য প্রয়োগ করা হয়েছে।

# অন্তর্ভুক্ত করুন
#অন্তর্ভুক্ত <ব্যতিক্রম>
ব্যবহার নামস্থান std ;

ক্লাস DemoException : সর্বজনীন ব্যতিক্রম
{
অপার্থিব const চর * কি ( ) const নিক্ষেপ ( )
{
ফিরে 'কাস্টম ব্যতিক্রম ধরা পড়েছে' ;
}
} ;
int প্রধান ( )
{
DemoException dEx ;
চেষ্টা করুন
{
নিক্ষেপ ডিএক্স ;
}
ধরা ( ব্যতিক্রম এবং ছাড়া )
{
cout << ছাড়া কি ( ) << endl ;
}
ফিরে 0 ;
}

আমরা “iostream” এবং “ব্যতিক্রম” সহ কোডে হেডার ফাইলটি সংজ্ঞায়িত করি। 'iostream' বিশেষভাবে ইনপুট এবং আউটপুট স্ট্রিমের জন্য বলা হয়, যেখানে 'ব্যতিক্রম' লাইব্রেরি ব্যতিক্রম পরিচালনা করার জন্য ডাকা হয়। এর পরে, আমরা 'DemoException' ক্লাস তৈরি করি যা C++ এর 'ব্যতিক্রম' ক্লাস থেকে উদ্ভূত। এখানে, আমরা ভার্চুয়াল what() ফাংশন সেট করি যা const char* প্রদান করতে ব্যবহৃত হয় যা ব্যতিক্রমের সাথে লিঙ্ক করা একটি ত্রুটি বার্তার ফলাফল প্রদর্শন করে।







তারপর, আমরা একটি main() ফাংশন চালু করি যেখানে আমরা 'DemoException' ক্লাসের 'dEx' অবজেক্ট তৈরি করি। এর পরে, আমাদের কাছে একটি 'ট্রাই' ব্লক সংজ্ঞা রয়েছে যা সম্মুখীন হলে ব্যতিক্রমটি নিক্ষেপ করে। এখানে, আমরা 'dEx' অবজেক্ট নিক্ষেপ করি।



এর পরে, আমরা ব্যতিক্রমটি ধরতে এবং এটি পরিচালনা করতে 'ক্যাচ' ব্লক সেট করি। আমরা ক্লাস এক্সেপশনের রেফারেন্সটি প্যারামিটার হিসাবে পাস করি যা এটি থেকে উদ্ভূত ব্যতিক্রমটি ধরতে পারে। 'ক্যাচ' ব্লকের ভিতরে, কনসোলে ব্যতিক্রম বার্তা পেতে আমরা 'ব্যতীত' তে what() ফাংশনকে কল করি।



প্রদত্ত প্রোগ্রামটি কার্যকর করার পরে, কাস্টম ব্যতিক্রম বার্তাটি ধরা হয় এবং কনসোলে নিক্ষেপ করা হয়:





উদাহরণ 2: দুটি ক্লাস ব্যবহার করে একটি কাস্টম ব্যতিক্রম তৈরি করার প্রোগ্রাম

প্রোগ্রামটি একাধিক ব্যতিক্রমগুলির সাথে মোকাবিলা করার উপর জোর দেয় যা একাধিক ক্লাস সংজ্ঞায়িত করে স্বাধীনভাবে পরিচালনা করা যেতে পারে।



# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;

ক্লাস মূল্যায়ন1 { } ;
ক্লাস মূল্যায়ন2 { } ;

int প্রধান ( ) {
চেষ্টা করুন {
নিক্ষেপ মূল্যায়ন1 ( ) ;
}
ধরা ( মূল্যায়ন1 ই ) {
cout << 'Evaluation1 ব্যতিক্রম ধরা পড়েছে!' << endl ;
}
চেষ্টা করুন {
নিক্ষেপ মূল্যায়ন2 ( ) ;
}
ধরা ( মূল্যায়ন2 ই ) {
cout << 'মূল্যায়ন 2 ব্যতিক্রম ধরা পড়েছে!' << endl ;
}

ফিরে 0 ;
}

প্রদত্ত কোডে, আমাদের কাছে দুটি শ্রেণীর সংজ্ঞা রয়েছে, “Evaluation1” এবং “Evaluation2”, যেগুলো এখন খালি। এর পরে, আমরা প্রোগ্রামের প্রধান() ফাংশনটি সম্পাদন করি। এখানে, আমরা চেষ্টা{} ব্লক সেট করেছি যেখানে 'থ্রো' কীওয়ার্ডটি 'Evaluation1()' ক্লাসের উদাহরণ ছুঁড়তে ব্যবহৃত হয়। এটি প্রতিনিধিত্ব করে যে এই 'ট্রাই' ব্লকের মধ্যে প্রোগ্রামে কোনো ব্যতিক্রম দেখা দিলে 'Evaluation1' ব্যতিক্রমটি নিক্ষেপ করা হয়। এর পরে, আমাদের কাছে একটি ক্যাচ{} ব্লক রয়েছে যেখানে ব্যতিক্রমটি ধরা পড়ে এবং ব্যতিক্রমের বার্তা প্রদর্শন করে।

একইভাবে, আমাদের কাছে “Evaluation2” ক্লাসের জন্য আরেকটি চেষ্টা{} ব্লকের সংজ্ঞা রয়েছে। সেই চেষ্টা{} ব্লকের ভিতরে, আমরা 'Evaluation2' ক্লাসের উদাহরণ নিক্ষেপ করি। এখানে একটি ত্রুটি ঘটলে এটি 'Evaluation2' এর ব্যতিক্রমকে নিক্ষেপ করে। তারপর, এই ব্লকের মধ্যে ব্যতিক্রম ধরা পড়লে আমরা 'cout' কমান্ড ব্যবহার করে ব্যতিক্রম বার্তা প্রদর্শন করতে catch{} ব্লককে কল করি।

ভিন্ন ভিন্ন 'ট্রাই-ক্যাচ' ব্লকের দুটি ব্যতিক্রম কনসোলে নিক্ষেপ করা হয় যা দুটি ভিন্ন শ্রেণীর দ্বারা পরিচালিত হয়।

উদাহরণ 3: কনস্ট্রাক্টরের সাথে একটি কাস্টম ব্যতিক্রম তৈরি করার প্রোগ্রাম

প্রোগ্রামটি ব্যতিক্রম পরিচালনা করার জন্য কন্সট্রাক্টর ব্যবহার করে। যদিও আমরা কনস্ট্রাক্টর থেকে মানগুলি পেতে পারি না, আমরা 'ট্রাই-ক্যাচ' ব্লক ব্যবহার করে এটি অর্জন করতে পারি।

# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;

ক্লাস পরীক্ষা {
int ভাল ;

সর্বজনীন :
পরীক্ষা ( int n )
{
চেষ্টা করুন {
যদি ( n == 0 )
ভাল = n ;
প্রদর্শন ( ) ;
}

ধরা ( const চর * exp ) {
cout << 'ব্যতিক্রম পাওয়া গেছে \n ' ;
cout << exp << endl ;
}

}

অকার্যকর প্রদর্শন ( )
{
cout << 'মান =' << ভাল << endl ;
}
} ;

int প্রধান ( )
{

পরীক্ষা ( 0 ) ;
cout << 'আবার উদাহরণ তৈরি করা হচ্ছে \n ' ;
পরীক্ষা ( 1 ) ;
}

প্রদত্ত কোডে, আমরা 'টেস্ট' ক্লাস স্থাপন করি যেখানে ভেরিয়েবলটিকে টাইপ পূর্ণসংখ্যার 'ভাল' হিসাবে ঘোষণা করা হয়। তারপর, আমাদের কাছে 'Test()' কন্সট্রাকটর ফাংশনের একটি সংজ্ঞা আছে যা 'n' ভেরিয়েবলের সাথে পাস করা হয়েছে। তারপরে আমরা 'Test()' কনস্ট্রাক্টর ফাংশনের মধ্যে 'ট্রাই-ক্যাচ' ব্লক সেট করি। if() স্টেটমেন্ট দিয়ে try ব্লক বলা হয়। যদি 'n' এর মান শূন্যের সমান হয়, তবে 'ক্যাচ' ব্লকটি ব্যতিক্রমটি ধরবে এবং ব্যতিক্রম বার্তাটি প্রম্পটে নিক্ষেপ করা হবে। 'n' এর মান 'val' ভেরিয়েবলে সংরক্ষিত হয় যখন আমরা এটি শুরু করি।

এর পরে, 'val' ভেরিয়েবলে সংরক্ষিত মান দেখানোর জন্য আমরা display() ফাংশনকে কল করি। এর পরে, আমাদের কাছে 'ক্যাচ' ব্লকের সংজ্ঞা রয়েছে যেখানে 'ট্রাই' ব্লক দ্বারা নিক্ষিপ্ত ব্যতিক্রমটি পরিচালনা করা হয়। সবশেষে, আমরা main() ফাংশন চালু করি। যার ভিতরে, আমরা 'Test()' কনস্ট্রাক্টরকে কল করি। কনস্ট্রাক্টর ট্রিগার হয় যখন 'Test()' ক্লাসের অবজেক্ট তৈরি করা হয় এবং '0' এর মান দিয়ে নির্দিষ্ট করা হয় যেখানে ব্যতিক্রমটি নিক্ষেপ করা হয়।

এর পরে, 1 এর মান দিয়ে পাস করা একটি উদাহরণ তৈরি করতে আমরা আবার 'Test()' ক্লাসকে কল করি। এখানে, কনস্ট্রাক্টর কোনও ব্যতিক্রম নিক্ষেপ করবে না কারণ মানটি 0 এর সমান নয়। display() ফাংশনটি হবে। “val” এর মান নির্বাহ এবং প্রিন্ট করুন।

কনস্ট্রাক্টরকে কল করে কাস্টম ব্যতিক্রমটি কনসোলে নিক্ষেপ করা হয়। এছাড়াও, যখন শর্ত সন্তুষ্ট হয়, কনস্ট্রাক্টর কোন ব্যতিক্রম ছাড়াই কার্যকর করে।

উদাহরণ 4: একটি ব্যবহারকারী-সংজ্ঞায়িত কাস্টম ব্যতিক্রম তৈরি করার প্রোগ্রাম

প্রম্পটে জিজ্ঞাসা করা হলে ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ব্যতিক্রমটি এখানে প্রোগ্রামটি পরিচালনা করে এবং ক্যাচ করে।

# অন্তর্ভুক্ত করুন
#অন্তর্ভুক্ত <ব্যতিক্রম>
ব্যবহার নামস্থান std ;
ক্লাস মাইডেমো : পাবলিক ব্যতিক্রম {
পাবলিক :
const চর * কি ( ) const নিক্ষেপ ( )
{
ফিরে 'ব্যতিক্রম! শূন্য দিয়ে ভাগ করার চেষ্টা করেছি! \n ' ;
}
} ;
int প্রধান ( )
{
চেষ্টা করুন
{
int n1, n2 ;
cout << 'দুটি পূর্ণসংখ্যা লিখুন: \n ' ;
খাওয়া >> n1 >> n2 ;
যদি ( n2 == 0 )
{
মাইডেমো n3 ;
নিক্ষেপ n3 ;
}
অন্য
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
ধরা ( ব্যতিক্রম এবং exc )
{
cout << exc কি ( ) ;
}
}

প্রদত্ত কোডে, আমরা প্রথমে 'MyDemo()' ক্লাসটি সংজ্ঞায়িত করি যা ব্যতিক্রমের নির্ভরশীল শ্রেণী। এর পরে, আমরা “ভার্চুয়াল” কীওয়ার্ড দিয়ে পাবলিক what() ফাংশন সেট করি। প্রোগ্রামে ব্যতিক্রমের কারণ জানতে what() ফাংশনটি কল করা হয় যখন throw() ফাংশন ব্যতিক্রমটি থ্রো করে। তারপরে, আমাদের একটি main() ফাংশন আছে যেখানে ব্যতিক্রম সনাক্ত ও পরিচালনা করার জন্য try-catch{} ব্লকগুলিকে সংজ্ঞায়িত করা হয়। চেষ্টা{} ব্লকের মধ্যে, আমরা দুটি ভেরিয়েবল ঘোষণা করি, 'n1' এবং 'n2', যার মান 'cin' কমান্ড ব্যবহার করে ব্যবহারকারীর কাছ থেকে নেওয়া হয়। যখন প্রতিটি 'n1' এবং 'n2' ভেরিয়েবলের বিপরীতে মানগুলি পাওয়া যায়, তখন 'if' শর্তটি পরীক্ষা করবে যে 'n2' ভেরিয়েবলটি 0 এর সমান কিনা। যদি তাই হয়, একটি ব্যতিক্রম নিক্ষেপ করা হয় বা বিভাগের ফলাফল ফেরত দেওয়া হয়। সবশেষে, আমাদের কাছে একটি ক্যাচ{} ব্লক রয়েছে যা এটি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত প্যারামিটার হিসাবে 'ব্যতিক্রম' ক্লাসের রেফারেন্স নেয়।

আউটপুট দেখায় যখন শর্তটি পূরণ না হয় এবং প্রোগ্রামটি ব্যতিক্রম ছাড়াই কার্যকর করা হয়:

এছাড়াও, প্রোগ্রামে ব্যতিক্রমটি কীভাবে নিক্ষেপ করা হয় এবং ধরা হয় তা উপস্থাপন করার জন্য আমরা 'n2' ভেরিয়েবলে '0' এর মান সংজ্ঞায়িত করি।

উপসংহার

উপসংহারে, আমরা C++ এর গুরুত্বপূর্ণ ধারণাটি প্রদর্শন করেছি যা একটি ব্যতিক্রম। একটি ব্যতিক্রম প্রোগ্রামের নিয়মিত সম্পাদনকে বাধা দেয়। এর জন্য, প্রোগ্রামে ঘটে যাওয়া ব্যতিক্রমটি পরিচালনা করতে আমরা 'থ্রো', 'ট্রাই' এবং 'ক্যাচ' কীওয়ার্ড ব্যবহার করেছি। ব্যতিক্রমটি ভিন্নভাবে পরিচালনা করতে আমরা পূর্ববর্তী উদাহরণগুলিতে এই কীওয়ার্ডগুলি ব্যবহার করেছি।