C++-এ অপারেটর ওভারলোডিং-এ আসলে ৩টি বেসিক রুল অনুসরণ করা উচিত। সব রুলের মতো এখানেও ব্যতিক্রম আছে। এই ৩টি রুল হলো:
- ১. যখনই একটি অপারেটর”的意思 স্পষ্টভাবে পরিষ্কার এবং অনবিবাদিত নয়, তখন সেটি ওভারলোড করা উচিত নয়। বরং একটি সুন্দর নামের ফাংশন প্রদান করুন। মূলত, অপারেটর ওভারলোডিং-এর সবচেয়ে প্রথম এবং আসল রুল বলতে গেলে: এটি করবেন না।
- এটি শোনা আশ্চর্য লাগতে পারে, কিন্তু অপারেটর ওভারলোডিং শুধু কিছু কিছু ক্ষেত্রে উপযুক্ত। কারণ, একটি অপারেটর এর অ্যাপ্লিকেশন ডোমেনে ব্যবহার যদি ভালোভাবে পরিচিত এবং অনবিবাদিত না হয়, তবে অপারেটর অ্যাপ্লাই করার সেমান্টিক্স বুঝতে কঠিন।
- ২. সবসময় অপারেটরসহ所周知 সেমান্টিক্সের সাথে থাকুন। C++ ওভারলোডেড অপারেটরদের সেমান্টিক্সের ওপর কোনো সীমাবদ্ধতা আরোপ করে না। আপনার কম্পাইলার খুশি খুশি এমন কোড এক্সেপ্ট করবে যা বাইনারি + অপারেটর ইমপ্লিমেন্ট করে তার রাইট অপারেন্ড থেকে বিয়োগ করতে। কিন্তু そんんো অপারেটর ব্যবহারের ইউজাররা কখনো a + b এক্সপ্রেশন থেকে a-কে b বিয়োগ করতে হবে তা অনুমান করবেন না।
- ৩. একটি সেট রিলেটেড অপারেশন সবসময় প্রদান করুন। অপারেটরগুলো একে অপরের সাথে এবং অন্যান্য অপারেশনের সাথে রিলেটেড। আপনার টাইপ যদি a + b সাপোর্ট করে, তবে ইউজাররা a += b কল করতে পারবেন এমন আশা করবেন। যদি এটি প্রিফিক্স ইনক্রিমেন্ট ++a সাপোর্ট করে, তবে তারা a++ কাজ করবে আশা করবেন। যদি তারা চেক করতে পারেন a < b, তবে তারা নিশ্চিতভাবেই চেক করতে পারবেন a > b। যদি তারা আপনার টাইপ কপি-কনস্ট্রাক্ট করতে পারে, তবে তারা অ্যাসাইনমেন্টও কাজ করবে আশা করবেন।
- বেশিরভাগ কেসে আপনাকে অপারেটর ওভারলোডিং দরকার নেই এবং শুধু তখন ওভারলোড করুন যখন সেটি ভালোভাবে ডিফাইন করা এবং পরিস্থিতির জন্য উপযুক্ত। এই পোস্ট অনুপ্রাণিত https://stackoverflow.com/a/4421708/3719089।