কম্পিউটার

C++ এ ডট (.) অপারেটর এবং -> এর মধ্যে পার্থক্য কী?


বিন্দু এবং তীর অপারেটর উভয়ই একটি ক্লাসের সদস্যদের অ্যাক্সেস করতে C++ এ ব্যবহৃত হয়। তারা শুধু বিভিন্ন পরিস্থিতিতে ব্যবহার করা হয়. C++ এ, শ্রেণি, স্ট্রাকট বা ইউনিয়ন হিসাবে ঘোষিত প্রকারগুলিকে "শ্রেণির প্রকার" হিসাবে বিবেচনা করা হয়। তাই নিম্নলিখিত তিনটিরই উল্লেখ করে৷

  • a.b শুধুমাত্র তখনই ব্যবহার করা হয় যদি b অবজেক্টের সদস্য হয় (বা একটি বস্তুর উল্লেখ[1]) a. সুতরাং a.b-এর জন্য, a সর্বদা একটি ক্লাসের একটি প্রকৃত বস্তু (বা একটি বস্তুর উল্লেখ) হবে।
  • a→b মূলত (*a).b-এর জন্য একটি সংক্ষিপ্ত স্বরলিপি, অর্থাৎ, যদি a একটি বস্তুর নির্দেশক হয়, তাহলে a→b বস্তুটির b বৈশিষ্ট্যকে অ্যাক্সেস করছে যা একটি নির্দেশ করে। .

মনে রাখবেন যে . ওভারলোডযোগ্য নয়। → ওভারলোডযোগ্য অপারেটর, তাই আমরা আমাদের নিজস্ব ফাংশন (অপারেটর→()) সংজ্ঞায়িত করতে পারি যা এই অপারেটরটি ব্যবহার করা হলে কল করা উচিত। তাই যদি a একটি ক্লাসের একটি বস্তু হয় যা অপারেটরকে ওভারলোড করে→ (সাধারণ এই ধরনের হয় স্মার্ট পয়েন্টার এবং ইটারেটর), তাহলে অর্থ হল ক্লাস ডিজাইনার যা কিছু প্রয়োগ করেছে।

[1] রেফারেন্সগুলি, শব্দার্থগতভাবে, অবজেক্টের উপনাম, তাই আমার #3 তেও "বা একটি পয়েন্টারের রেফারেন্স" যোগ করা উচিত ছিল। যাইহোক, আমি ভেবেছিলাম এটি সহায়কের চেয়ে বেশি বিভ্রান্তিকর হবে, কারণ পয়েন্টার (T*&) এর রেফারেন্স খুব কমই ব্যবহার করা হয়।

উদাহরণ

#include<iostream>
class A {
   public: int b;
   A() { b = 5; }
};

int main() {
   A a = A();
   A* x = &a;
   std::cout << "a.b = " << a.b << "\n";
   std::cout << "x->b = " << x->b << "\n";
   return 0;
}

আউটপুট

এটি আউটপুট দেবে −

5
5

  1. C++ এ ডট অপারেটর কি?

  2. C# এ একটি ইন্টারফেস এবং একটি বিমূর্ত ক্লাসের মধ্যে পার্থক্য কী?

  3. C# এ একটি ইন্টারফেস এবং একটি ক্লাসের মধ্যে পার্থক্য কী?

  4. পাইথনে =এবং ==অপারেটরগুলির মধ্যে পার্থক্য কী?