কম্পিউটার টিউটোরিয়াল

C++-এ অ্যারে মেম্বার গভীরভাবে কপি হয় কিনা?

সমস্যা বিবরণ

C/C++-এ একটি স্ট্রাকচার (ক্লাস C++-এ) ভেরিয়েবলকে একই টাইপের অন্য ভেরিয়েবলে অ্যাসাইন করা যায়। স্ট্রাকচার ভেরিয়েবল অ্যাসাইন করার সময় সব মেম্বার কপি হয়। প্রশ্ন হলো স্ট্রাকচারে অ্যারে থাকলে কী হয়?

মূল পয়েন্ট: অ্যারে মেম্বার শ্যালো কপি হয় না; কম্পাইলার অটোমেটিক্যালি অ্যারে মেম্বারের জন্য **ডিপ কপি (Deep Copy)** করে। নিচের প্রোগ্রামে struct test-এ char str1[20] অ্যারে মেম্বার আছে। st1 কে st2-তে অ্যাসাইন করলে st2-র একটি নতুন অ্যারে কপি পাওয়া যায়। তাই st1-এর str[] মডিফাই করলে st2 পরিবর্তিত হয় না।

C++ কোড উদাহরণ

# include <iostream> 
# include <string.h> 
using namespace std; 

struct test { 
    char str1[20]; 
}; 

int main() { 
    struct test st1, st2; 
    strcpy(st1.str1, "Tutorial Point"); 
    st2 = st1; 
    st1.str1[0] = 'X'; 
    st1.str1[1] = 'Y'; 
    /* ডিপ কপি হওয়ায় দুটি অ্যারে আলাদা */ 
    cout << "st1's str = " << st1.str1 << endl; 
    cout << "st2's str = " << st2.str1 << endl; 
    return 0; 
}

আউটপুট

st1's str = XYtorial Point 
st2's str = Tutorial Point

সুতরাং, C++ ক্লাসে অ্যারে মেম্বারের জন্য কপি কনস্ট্রাক্টর বা অ্যাসাইনমেন্ট অপারেটর লিখতে হয় না, কারণ ডিফল্ট বিহেভিয়রই ডিপ কপি।

  1. C++-এ মেজোরিটি এলিমেন্ট (Majority Element)

  2. C++-এ স্ট্রিং এর অ্যারে (C++ Array of Strings)

  3. C++-এ সর্টিং (Sorting)

  4. C++-এ স্ট্যাটিক ক্লাস মেম্বার কখন ইনিশিয়ালাইজ হয়?