মনে করুন অ্যাক্সেস নিয়ন্ত্রণ ওভারলোড রেজোলিউশনের আগে এসেছিল। কার্যকরভাবে, এর অর্থ হবে public/protected/private
অ্যাক্সেসযোগ্যতার চেয়ে নিয়ন্ত্রণযুক্ত দৃশ্যমানতা।
স্ট্রস্ট্রপ দ্বারা সি ++ এর ডিজাইন এবং বিবর্তনের বিভাগের 2.10 এর একটি অংশ রয়েছে যেখানে তিনি নিম্নলিখিত উদাহরণটি আলোচনা করেছেন
int a; // global a
class X {
private:
int a; // member X::a
};
class XX : public X {
void f() { a = 1; } // which a?
};
স্ট্রোভস্ট্রুপের উল্লেখ বর্তমান নিয়ম (অভিগম্যতা আগে দৃশ্যমানতা) এর সুবিধা যে (অস্থায়ীভাবে) chaning যে private
ভিতরে class X
প্রবেশ public
(যেমন ডিবাগ উদ্দেশ্যে) উপরের প্রোগ্রামের অর্থ কোন শান্ত পরিবর্তন নেই (অর্থাত হয় X::a
প্রয়াস করা হয় উভয় ক্ষেত্রে অ্যাক্সেস করা হবে, যা উপরের উদাহরণে অ্যাক্সেস ত্রুটি দেয়)। যদি public/protected/private
দৃশ্যমানতা নিয়ন্ত্রণ করা হয় তবে প্রোগ্রামটির অর্থ পরিবর্তন হবে ( অন্যথায় বিশ্বব্যাপী a
ডাকা হবে )।private
X::a
তারপরে তিনি বলেছিলেন যে এটি স্পষ্টত নকশায় বা স্ট্যান্ডার্ড সি ++ এর ক্লাসেস পূর্বসূরীর সাথে সি বাস্তবায়নের জন্য ব্যবহৃত প্রিপ্রসেসর প্রযুক্তির কোনও পার্শ্ব প্রতিক্রিয়া দ্বারা তা স্মরণে নেই।
এটি কীভাবে আপনার উদাহরণের সাথে সম্পর্কিত? মূলত কারণ স্ট্যান্ডার্ড তৈরি ওভারলোড রেজোলিউশনটি সাধারণ নিয়মের সাথে সামঞ্জস্য করে যে নাম অনুসন্ধানটি অ্যাক্সেস নিয়ন্ত্রণের আগে আসে।
১০.২ সদস্যের নাম অনুসন্ধান [শ্রেণি.মায়ার.লুকআপ]
1 সদস্যের নাম অনুসন্ধান শ্রেণীর ক্ষেত্রের কোনও নামের অর্থ (আইডি-এক্সপ্রেশন) নির্ধারণ করে (3.3.7)। নাম অনুসন্ধানের ফলে একটি অস্পষ্টতা দেখা দিতে পারে, সেক্ষেত্রে প্রোগ্রামটি দুর্বল। একটি আইডি-এক্সপ্রেশন জন্য, নাম সন্ধান শুরু হয় এর শ্রেণিকক্ষে; একটি যোগ্য-আইডির জন্য, নাম সন্ধান শুরু করা নেস্টেডনাম-স্পেসিফায়ারের সুযোগে। অ্যাক্সেস নিয়ন্ত্রণের আগে নাম সন্ধান করা হয় (3.4, ধারা 11)।
8 যদি কোনও ওভারলোডেড ফাংশনটির নামটি দ্ব্যর্থহীনভাবে পাওয়া যায়,
অ্যাক্সেস নিয়ন্ত্রণের আগে ওভারলোডিং রেজোলিউশন (13.3) হয় । অস্পষ্টতা প্রায়শই কোনও নামটির শ্রেণীর নাম সহ যোগ্যতার মাধ্যমে সমাধান করা যায়।