ত্রুটি: অ্যাবস্ট্রাক্ট ক্লাস ইনস্ট্যান্টিয়েট করা যাবে না

Truti A Yabastrakta Klasa Inastyantiyeta Kara Yabe Na



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

বাক্য গঠন

আমাদের ত্রুটির ত্রুটি বার্তাটি নিম্নরূপ:

ত্রুটি : পরিবর্তনশীল ঘোষণা করতে পারে না '' '' বিমূর্ত ধরনের ''''

মনে রাখবেন যে খালি বন্ধনীতে, পরিবর্তনশীল এবং বিমূর্ত শ্রেণীর নাম থাকবে।







ত্রুটি C2259 : 'রাষ্ট্র' : বিমূর্ত শ্রেণীকে তাত্ক্ষণিক করতে পারে না

এটি এমন একটি বার্তা যা আমরা কম্পাইলার থেকে পাই যখন আমরা এই ধরনের ত্রুটির সম্মুখীন হই।



উদাহরণ # 01:

এই ত্রুটিটি বোধগম্য করার জন্য, আমরা একটি উদাহরণ সঞ্চালন করব যাতে আমরা আমাদের কোডটি এমনভাবে লিখব যাতে আমরা একটি ত্রুটি পাই। সেই উদ্দেশ্যে, আমরা 'শেপক্লাস' নামে একটি ক্লাস শুরু করেছি। এই ক্লাসটি বিমূর্ত করার জন্য, আমরা এটিতে 'getArea' নামে একটি ভার্চুয়াল ফাংশন ঘোষণা করেছি। আমরা যথাক্রমে “setWidth” এবং “setHeight” নামে আরও দুটি ফাংশন ঘোষণা করেছি। আমরা এখানে যা করতে চাই তা হল আমরা একটি প্যারামিটার হিসাবে উচ্চতা এবং ইনপুট প্যারামিটার হিসাবে প্রস্থ পেতে চাই। আমরা আমাদের ইনপুট প্যারামিটারের সাহায্যে এলাকা গণনা করব। আমরা প্রধান পদ্ধতিতে আমাদের ক্লাসের একটি উদাহরণ তৈরি করেছি। সেই অবজেক্টের সাহায্যে, আমরা মেথডগুলোকে কল করেছি এবং সেই মেথডের মাধ্যমে ইনপুট প্যারামিটারগুলো পাস করব। এর পরে, আমরা ফলাফল পরীক্ষা করতে আমাদের আউটপুট মুদ্রণ করেছি।



# অন্তর্ভুক্ত করুন

নামস্থান std ব্যবহার করে ;
ক্লাস ShapeClass
{
পাবলিক :
অপার্থিব int গেটারিয়া ( ) = 0 ;
অকার্যকর সেট প্রস্থ ( int ভিতরে )
{
প্রস্থ = ভিতরে ;
}
অকার্যকর সেট উচ্চতা ( int )
{
উচ্চতা = ;
}
সুরক্ষিত :
int প্রস্থ ;
int উচ্চতা ;
} ;
int প্রধান ( অকার্যকর )
{
ShapeClasssh ;
সেট প্রস্থ ( 1 ) ;
সেট উচ্চতা ( দুই ) ;
cout << 'মোট আয়তক্ষেত্র এলাকা:' << গেটারিয়া ( ) << endl ;
প্রত্যাবর্তন 0 ;
}

আমাদের কোডটি কার্যকর করার পরে সিস্টেমটি আমাদের একটি ত্রুটি দিয়েছে। ত্রুটি বার্তাটি বলে যে আমরা পরিবর্তনশীল 'sh' কে বিমূর্ত ধরণের 'শেপক্লাস' হিসাবে ঘোষণা করতে পারি না। এখন, কম্পাইলারটি বোঝানোর চেষ্টা করছে যে 'শেপক্লাস' একটি বিমূর্ত প্রকার এবং আমরা এটির পরিবর্তনশীল ঘোষণা করতে পারি না। সুতরাং, বার্তাটির মাধ্যমে, আমরা স্পষ্টভাবে বুঝতে পারি যে কম্পাইলার আমাদের বিমূর্ত ক্লাসটি ইনস্ট্যান্টিয়েট করতে দিচ্ছে না যে কারণে সিস্টেমটি আমাদের ত্রুটি দিচ্ছে।





ত্রুটিটি সমাধান করার জন্য, আমরা আরেকটি ক্লাস 'আয়তক্ষেত্র' ঘোষণা করেছি। এই ক্লাসটি হবে আমাদের অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাস এবং আমরা এই ক্লাসে আমাদের ভার্চুয়াল ফাংশনের বডি ঘোষণা করব। এর পরে, আমরা মূল পদ্ধতিতে এর অবজেক্ট তৈরি করব এবং এর অবজেক্টের সাহায্যে আমরা ফাংশনগুলিকে কল করব।



সংশোধনের পরে, আমরা আমাদের কোড তৈরি করেছি এবং আমরা এখন আমাদের কোড চালাতে সফল হয়েছি। সিস্টেম ত্রুটি ছাড়াই আমাদের কোড নির্বাহ করেছে। আমরা আউটপুটে দেখতে পাচ্ছি যে সিস্টেমটি একটি আয়তক্ষেত্রের ক্ষেত্রফল গণনা করেছে এবং আউটপুটটি প্রিন্ট করেছে। আমরা শিখেছি যে আমাদের ভুল ছিল যে আমরা সরাসরি আমাদের বিমূর্ত শ্রেণীর বস্তুটিকে কল করছিলাম যা ভুল পদ্ধতি ছিল। যখন আমরা এর চাইল্ড ক্লাস অবজেক্টকে কল করি তখন আমাদের কোড সূক্ষ্মভাবে কাজ করতে শুরু করে।

উদাহরণ # 02:

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

আমরা বিমূর্ত ক্লাসে ঘোষিত একটি পদ্ধতিতে 'অবজেক্ট ব্যবহার করে পাস করা মান' প্রিন্ট করেছি। ফাংশনের নাম “valueFunc”। আমরা যেমন আলোচনা করেছি, ভার্চুয়াল ফাংশনের বডি চাইল্ড ক্লাসে ঘোষণা করা হয়। আমাদের চাইল্ড ক্লাসে, আমরা আমাদের ভার্চুয়াল ফাংশন বডিতে 'ইন ভার্চুয়াল ফাংশন' প্রিন্ট করেছি। এখন, আমরা আমাদের মান ফাংশনে একটি মান পাস করব এবং দেখব যে মানটি পৌঁছেছে তা সঠিক কিনা। আমাদের মূল পদ্ধতিতে, আমরা আমাদের বিমূর্ত শ্রেণীর একটি উদাহরণ তৈরি করেছি এবং উদাহরণের সাহায্যে আমরা আমাদের ভার্চুয়াল এবং অন্যান্য ফাংশনগুলিকে কল করব। এখন, আমরা আমাদের কোড কার্যকর করব।

# অন্তর্ভুক্ত করুন

নামস্থান std ব্যবহার করে ;
ক্লাস AbsClass
{
পাবলিক :
অপার্থিব int VirtFunc ( ) = 0 ;
অকার্যকর valueFunc ( int ভিতরে )
{
প্রস্থ = ভিতরে ;
cout << 'অবজেক্ট ব্যবহার করে মান পাস করা হয়েছে' << ভিতরে << endl ;
}
সুরক্ষিত :
int প্রস্থ ;
} ;
ক্লাস চাইল্ডক্লাস :
পাবলিক AbsClass
{
পাবলিক :
int VirtFunc ( ) {
cout << 'ভার্চুয়াল ফাংশনে' << endl ;
}
} ;
int প্রধান ( অকার্যকর )
{
চাইল্ডক্লাস সি.সি ;
cc valueFunc ( 5 ) ;
cout << cc VirtFunc ( ) << endl ;
প্রত্যাবর্তন 0 ;
}

আমাদের কোড কার্যকর করার পরে, আমরা একটি ত্রুটি পেতে হবে. এই ত্রুটিটি মূলত যে আমরা একটি বিমূর্ত শ্রেণীকে ইনস্ট্যান্ট করতে পারি না যা আমরা এখানে আমাদের মূল পদ্ধতিতে করার চেষ্টা করছি। এখানে একটি বিষয় লক্ষণীয় যে আমাদের বার্তায় পরিবর্তনশীল এবং বিমূর্ত প্রকার পরিবর্তন করা হয়েছে।

এখন, আমরা আমাদের ত্রুটি দূর করার এবং আমাদের কোড চালানোর চেষ্টা করব। সেই উদ্দেশ্যে, আমরা আমাদের শিশু শ্রেণীর বস্তু তৈরি করব এবং তার উদাহরণ তৈরি করব। সেই উদাহরণের সাহায্যে, আমরা আমাদের বিমূর্ত ক্লাসে ভার্চুয়াল এবং অন্য পদ্ধতি উভয়কেই কল করব। আমরা চাইল্ড ক্লাস ব্যবহার করে ভার্চুয়াল ফাংশন অ্যাক্সেস করতে পারি কি না তাও পর্যবেক্ষণ করা হবে। যদি আমরা এটি করতে সফল হই, তাহলে আমরা বলতে পারি যে আমরা বিমূর্ত শ্রেণীটি এর প্রাপ্ত শ্রেণী ব্যবহার করে অ্যাক্সেস করেছি।

আমাদের কোড কার্যকর করার পরে, কম্পাইলার এই সময় কোন ত্রুটি নিক্ষেপ করেনি। পরিবর্তে, সিস্টেমটি সফলভাবে আমাদের কোড কম্পাইল করেছে এবং আমাদের আউটপুট দিয়েছে। এখন, আউটপুট দেখে নেওয়া যাক। সিস্টেমটি এর বিপরীতে 'অবজেক্ট ব্যবহার করে পাস করা মান' এবং '5' মুদ্রণ করেছে। কারণ আমরা মূল পদ্ধতিতে আমাদের উদাহরণ ব্যবহার করে 5 পাস করেছি। এর পরে, এটি আমাদের ভার্চুয়াল ফাংশনে আমরা যে লাইনটি করতে বলেছিলাম তা মুদ্রণ করে।

উপসংহার

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