কম্পিউটার

C++ এ ভার্চুয়াল কপি কনস্ট্রাক্টর


বিষয়গুলির গভীরে খনন করার আগে সমস্ত সম্পর্কিত পদগুলি ব্রাশ করা যাক৷

একটি কপি কনস্ট্রাক্টর একটি বিশেষ ধরনের কনস্ট্রাক্টর যা একটি বস্তু তৈরি করতে ব্যবহৃত হয় যা পাস করা বস্তুর একটি সঠিক অনুলিপি।

একটি ভার্চুয়াল ফাংশন এটি একটি সদস্য ফাংশন যা অভিভাবক শ্রেণীতে ঘোষণা করা হয় এবং একটি চাইল্ড ক্লাসে পুনরায় সংজ্ঞায়িত করা হয় (অভাররাইড করা হয়) যা অভিভাবক শ্রেণীর উত্তরাধিকারী হয়৷

একটি ভার্চুয়াল কপি কনস্ট্রাক্টর ব্যবহার করে, প্রোগ্রামার বস্তুর সঠিক ডেটা টাইপ না জেনেই একটি অবজেক্ট তৈরি করতে সক্ষম হবে।

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

একটি উদাহরণ দেওয়া যাক, ধরুন আমাদের কাছে একটি ফিগার আছে কে সেই ক্ষেত্রটি প্রোগ্রাম ব্যবহার করে খুঁজে বের করতে হবে। কিন্তু একটি বস্তুর টাইপ আপ রিয়েল-টাইম হিসাবে সংজ্ঞায়িত করা হয় যে এটি একটি বর্গক্ষেত্র আয়তক্ষেত্র বা একটি বৃত্ত হতে পারে। তাই আমরা একটি ভার্চুয়াল কপি কনস্ট্রাক্টর ব্যবহার করব যা ব্যবহারকারী যে ধরনের ইনপুট করেছে তার উপর ভিত্তি করে বস্তুগুলিকে কপি করবে।

ভার্চুয়াল কনস্ট্রাক্টরদের সঠিকভাবে কাজ করার জন্য দুটি পদ্ধতি রয়েছে যা বেস ক্লাসের উপর সংজ্ঞায়িত করা হয়েছে। তারা হল -

clone()
create()

কপি কনস্ট্রাক্টর ভার্চুয়াল ক্লোন পদ্ধতি ব্যবহার করে যেখানে ভার্চুয়াল কনস্ট্রাক্টর তৈরি করার জন্য ডিফল্ট কনস্ট্রাক্টররা ভার্চুয়াল তৈরি পদ্ধতি ব্যবহার করে।

উদাহরণ

#include <iostream>
using namespace std;
class figure{
   public:
   figure() { }
   virtual
   ~figure() { }
   virtual void ChangeAttributes() = 0;
   static figure *Create(int id);
   virtual figure *Clone() = 0;
};
class square : public figure{
   public:
   square(){
      cout << "square created" << endl;
   }
   square(const square& rhs) { }
   ~square() { }
   void ChangeAttributes(){
      int a;
      cout<<"The side of square";
      cin>>a;
      cout<<"Area of square is "<<a*a;
   }
   figure *Clone(){
      return new square(*this);
   }
};
class circle : public figure{
   public:
   circle(){
      cout << "circle created" << endl;
   }
   circle(const circle& rhs) { }
   ~circle() { }
   void ChangeAttributes(){
      int r;
      cout << "enter the radius of the circle ";
      cin>>r;
      cout<<"the area of circle is "<<((3.14)*r*r);
   }
   figure *Clone(){
      return new circle(*this);
   }
};
class rectangle : public figure{
   public:
   rectangle(){
      cout << "rectangle created" << endl;
   }
   rectangle(const rectangle& rhs) { }
   ~rectangle() { }
   void ChangeAttributes(){
      int a ,b;
      cout<<"The dimensions of rectangle ";
      cin>>a>>b;
      cout<<"Area of rectangle is "<<a*b;
   }
   figure*Clone(){
      return new rectangle(*this);
   }
};
figure *figure::Create(int id){
   if( id == 1 ){
      return new square;
   }
   else if( id == 2 ){
      return new circle;
   }
   else{
      return new rectangle;
   }
}
class User{
   public:
   User() : figures(0){
      int input;
      cout << "Enter ID (1, 2 or 3): ";
      cin >> input;
      while( (input != 1) && (input != 2) && (input != 3) ){
         cout << "Enter ID (1, 2 or 3 only): ";
         cin >> input;
      }
      figures = figure::Create(input);
   }
   ~User(){
      if( figures ){
         delete figures;
         figures = 0;
      }
   }
   void Action(){
      figure *newfigure = figures->Clone();
      newfigure->ChangeAttributes();
      delete newfigure;
   }
   private:
   figure *figures;
};
int main(){
   User *user = new User();
   user->Action();
   delete user;
}

আউটপুট

Enter ID (1, 2 or 3): 2
circle created
enter the radius of the circle R 3
the area of circle is 28.26

  1. C++ এ একটি ভেক্টর কপি করার উপায়

  2. C++ এ কনস্ট্রাক্টরের কাছে একটি ভেক্টর পাস করা

  3. C++ এ কন্সট্রাক্টর বনাম অ্যাসাইনমেন্ট অপারেটর কপি করুন

  4. C++ এ কন্সট্রাক্টর কপি করুন