C ++ নেমস্পেস

C Namespace



C ++ এ একটি নেমস্পেস একটি সাধারণীকৃত সুযোগ। এর ঘোষনা শুরু হয় সংরক্ষিত শব্দ, নামস্থান, এর পরে প্রোগ্রামারের পছন্দের একটি নাম এবং তারপর বন্ধনীতে ব্লক। ব্লকে মৌলিক ঘোষণা এবং/অথবা C ++ বস্তু, ফাংশন এবং অন্যান্য সত্তার সংজ্ঞা রয়েছে।

নিম্নলিখিত কর্মসূচিতে একটি বিশ্বব্যাপী নিম্নলিখিত দুটি স্কেলার বিবৃতি বিবেচনা করুন:







#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

intvarId= 5;
ভাসাvarId= 2.3;

intপ্রধান()
{

প্রত্যাবর্তন 0;
}

এই প্রোগ্রামটি সংকলনের একটি প্রচেষ্টা একটি সংকলন ত্রুটির দিকে নিয়ে যায়। একই নামের দুটি ভেরিয়েবল আছে, varId । যদিও তারা দুটি ভিন্ন ধরনের দুটি ভিন্ন ভেরিয়েবল, int এবং ভাসা , কম্পাইলার দুটি ঘোষণা বাতিল করে কারণ তারা একই নামের। নিম্নলিখিত প্রোগ্রামটি দুটি ভিন্ন সাধারণীকৃত ক্ষেত্রগুলিতে একই নামের ভেরিয়েবল ঘোষণা করে এই সমস্যার সমাধান করে:



#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

নামস্থান NA
{
intvarId= 5;
}

নামস্থান NB
{
ভাসাvarId= 2.3;
}

intপ্রধান()
{
খরচ<<এনএ::varId << 'n';
খরচ<<NB::varId << 'n';

প্রত্যাবর্তন 0;
}

আউটপুট নিম্নরূপ:



5
2.3

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





এই নিবন্ধটি একটি নেমস্পেসের মৌলিক ধারণা এবং C ++ প্রোগ্রামিং ভাষায় এর ব্যবহারকে অন্তর্ভুক্ত করে। এই নিবন্ধটি অনুসরণ করতে, আপনার C ++ ভাষার প্রাথমিক জ্ঞান থাকা উচিত। আপনার C ++ সুযোগ সম্পর্কেও জ্ঞান থাকা উচিত, যদিও এই নিবন্ধে এটি সংক্ষেপে ব্যাখ্যা করা হয়েছে। C ++ এর সুযোগ সম্পর্কে আরও জানতে, বাক্যটি অনুসন্ধান করুন, C ++ তে বিন্যাস করুন (উদ্ধৃতি ছাড়া) যেকোনো linuxhint.com ওয়েব পৃষ্ঠার অনুসন্ধান বাক্সে এবং এন্টার টিপুন। এটি আপনাকে এই লেখকের লেখা নিবন্ধে নিয়ে যাবে।

নিবন্ধ বিষয়বস্তু

নেমস্পেস কি?

একটি ঘোষণামূলক অঞ্চল একটি প্রোগ্রামের বৃহত্তম অংশ যেখানে একটি সত্তা (পরিবর্তনশীল) এর নাম বৈধ। এই অঞ্চলকে স্কোপ বলা হয়। C ++ এ একটি নেমস্পেস হল একটি সাধারণীকৃত সুযোগ যার মূল উদ্দেশ্য হল নামের দ্বন্দ্ব সমাধান করা। একটি নামস্থানের মৌলিক ঘোষণা এবং/অথবা সত্তার সংজ্ঞা আছে।



গ্লোবাল নেমস্পেস এবং এর সমস্যা

বৈশ্বিক নামস্থান হল বৈশ্বিক সুযোগ। নিম্নলিখিত সংক্ষিপ্ত প্রোগ্রাম বিবেচনা করুন:

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

intপরিচয়= 55;
ভাসাপরিচয়= 12.17;

intপ্রধান()
{

প্রত্যাবর্তন 0;
}

উপরের প্রোগ্রামে, দুটি ভেরিয়েবল রয়েছে, উভয়কে বলা হয় পরিচয় । এই ভেরিয়েবলগুলি বৈশ্বিক পরিসরে রয়েছে; অর্থাৎ, তারা বৈশ্বিক নেমস্পেসে আছে। একটি ত্রুটি বার্তা দিয়ে এই প্রোগ্রামটি সংকলন করার চেষ্টা ব্যর্থ হবে। বৈশ্বিক সুযোগ একই নামের একাধিক ভেরিয়েবল গ্রহণ করে না, তাই কাস্টম নেমস্পেসের প্রয়োজন আছে।

কাস্টম নেমস্পেস

একটি নেমস্পেসের শুধুমাত্র একটি নাম নেই। পরিবর্তে, একটি নামস্থান অন্য নামের সেট সঙ্গে দ্বন্দ্ব এড়ানোর জন্য নামের একটি সেট আছে। কোডে কম সংঘাত এড়ানোর জন্য, প্রতিটি নামের পূর্বে নামস্থান এবং এবং :: । নিম্নলিখিত প্রোগ্রাম দুটি কাস্টম নামস্থান ব্যবহার করে এটি ব্যাখ্যা করে:

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

নামস্থান NA
{
intvarInt= 6;
ভাসাফ্ল্যাট;
}

নামস্থান NB
{
intvarInt= 7;
ভাসাফ্ল্যাট;
}

intপ্রধান()
{
খরচ<<এনএ::varInt << 'n';
খরচ<<NB::varInt << 'n';
এনএ::ফ্ল্যাট = 2.5;
NB::ফ্ল্যাট = 4.8;
খরচ<<এনএ::ফ্ল্যাট << 'n';
খরচ<<NB::ফ্ল্যাট << 'n';

প্রত্যাবর্তন 0;
}

আউটপুট হল:

6
7
2.5
4.8

লক্ষ্য করুন যে নামগুলি NA :: flt এবং NB :: flt চূড়ান্তভাবে সংজ্ঞায়িত করা হয়েছে প্রধান () ফাংশন C ++ বিশ্বব্যাপী এই ধরনের সংজ্ঞা অনুমোদন করে না।

লক্ষ্য করুন যে কাস্টম নেমস্পেস হল গ্লোবাল নেমস্পেসের নেস্টেড নেমস্পেস।

ব্যবহার নির্দেশিকা

নামস্থান ঘোষণার পর শুধু নামের পরিবর্তে সর্বদা namepace :: name টাইপ করা এড়াতে, আপনি ব্যবহার করতে পারেন ব্যবহার নির্দেশ ব্যবহার করার জন্য সিনট্যাক্স ব্যবহার নির্দেশনাটি নিম্নরূপ:

নেমস্পেস Namespace_name ব্যবহার করে;

দ্য ব্যবহার নির্দেশনা একটি প্রি -প্রসেসর নির্দেশ নয়, তাই এটি একটি সেমিকোলন (;) দিয়ে শেষ হয়।

নিচের প্রোগ্রামটি এর ব্যবহার ব্যাখ্যা করে ব্যবহার নির্দেশ এবং আরো:

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

নামস্থান NB
{
intvarInt= 7;
intফাংশন()
{
প্রত্যাবর্তনvarInt;
}
}

intfn()
{
নামস্থান NB ব্যবহার করে;
intmyVar2=ফাংশন();
// NB থেকে অন্যান্য বস্তু এবং ফাংশন অনুসরণ করে।
প্রত্যাবর্তনmyVar2;
}

intmyVar3=NB::ফাংশন();

intপ্রধান()
{
খরচ<<fn() << '' <<myVar3<< 'n';

প্রত্যাবর্তন 0;
}

এই প্রোগ্রামের আউটপুট হল 7 7 । শব্দটি নামস্থান NB ব্যবহার করে; এর শুরুতে স্থাপন করা হয়েছে fn () সংজ্ঞা দ্য func () NB নামস্থান থেকে ঠিক এর নীচে বলা হয়, আগে না দিয়ে NB ::

গ্লোবাল স্কোপে ঘোষিত একটি ভেরিয়েবল (গ্লোবাল নেমস্পেস) ঘোষণার বিন্দু থেকে ফাইলের শেষ পর্যন্ত দেখা যায়। এটি নেস্টেড নেমস্পেস (নেস্টেড স্কোপ), যেমন নেস্টেড -এও দেখা যায় fn () উপরে ফাংশন সুযোগ। দ্য ব্যবহার নির্দেশিকা তার নামস্থানকে সেই অবস্থান থেকে যোগ করে যেখানে এটি স্থাপন করা হয়েছে সেই সুযোগের শেষে।

নাম func () NB নামস্থান থেকে নীচে দেখা যাবে না fn () সংজ্ঞা কারণ নামস্থান NB ব্যবহার করে; ফাংশন স্কোপ (ব্লক) এর মধ্যে স্থাপন করা হয়েছিল। এই অবস্থার অধীনে, ব্যবহার করতে func () NB নেমস্পেস ব্লকের বাইরে (সুযোগ), এর আগে অবশ্যই হতে হবে NB :: , যেমন নিম্নলিখিত বিবৃতিতে:

intmyVar3=NB::ফাংশন();

দ্য ব্যবহার নির্দেশিকা তার নামস্থানকে বাইরের নেস্টিং নেমস্পেসের সাথে যোগ করে যে অবস্থান থেকে এটি বাইরের নেস্টিং নেমস্পেসের শেষে রাখা হয়। নিম্নলিখিত প্রোগ্রামে, এনএ নামস্থান বিশ্বব্যাপী নামস্থান সঙ্গে যুক্ত করা হয়। উভয় নামস্থান তারপর এর মধ্যে প্রসারিত fn () ফাংশন সংজ্ঞা নেমস্পেস, যেখানে তারা এনবি নেমস্পেসের সাথে যুক্ত হয়। NB নেমস্পেস এর শেষে শেষ হয় fn () ফাংশন সংজ্ঞা, এবং আগের দুটি নামস্থান ফাইলের শেষ পর্যন্ত চলতে থাকে (কোডের মাধ্যমে পড়ুন)।

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

নামস্থান NA
{
intvarInt= 6;
intফাংশন()
{
প্রত্যাবর্তনvarInt;
}

}

নামস্থান NB
{
intvarInt= 7;
intফাংশন()
{
প্রত্যাবর্তনvarInt;
}
}

নামস্থান NA ব্যবহার করে;
intmyVar0=varInt;
// অন্যান্য বস্তু এবং ফাংশন :: এবং NB অনুসরণ করে।

intfn()
{
intmyVar1=varInt;
নামস্থান NB ব্যবহার করে;
intmyVar2=NB::ফাংশন();
// NB থেকে অন্যান্য বস্তু এবং ফাংশন এই সুযোগের শেষ পর্যন্ত অনুসরণ করে।
প্রত্যাবর্তনmyVar1+myVar2;
}

// থেকে শুধুমাত্র বস্তু এবং ফাংশন :: এবং NB অনুসরণ করে।

intmyVar3=NB::ফাংশন();

intপ্রধান()
{
খরচ<<myVar0<< '' <<fn() << '' <<myVar3<< 'n';

প্রত্যাবর্তন 0;
}

আউটপুট হল 6, 13, 7

বিঃদ্রঃ: গ্লোবাল নেমস্পেস দিয়ে নির্দেশিত হয় :: , এর মানে হল যে স্কোপ রেজোলিউশন অপারেটরের আগে কিছুই নেই।

বিবৃতির নিচে, নামস্থান NA ব্যবহার করে; গ্লোবাল এবং এনএ নামস্থানগুলির ভেরিয়েবলগুলি তাদের উত্স নামস্থানের ইঙ্গিত ছাড়াই ব্যবহার করা যেতে পারে। পরবর্তী বিবৃতি ব্যবহার করে varInt এনএ নামস্থান। গ্লোবাল এবং এনএ মিলিত নামস্থান অঞ্চল পর্যন্ত বিস্তৃত fn () ফাংশন নেমস্পেস। তাহলে varInt এর প্রথম বিবৃতিতে fn () ফাংশন স্কোপ, এনএ নামস্থান।

যেহেতু বিশ্বব্যাপী এবং NA নামস্থানগুলির জন্য অঞ্চলটি জুড়ে বিস্তৃত fn () সুযোগ, পরে int myVar2 = NB :: func (); , NB নামস্থান থেকে যে কোন নাম শুধুমাত্র ব্যবহার করা যাবে fn () এটির পূর্বে ছাড়াই সুযোগ NB :: , শুধুমাত্র যদি এটি NA এবং গ্লোবাল নেমস্পেসে (ব্লক) না ঘটে। অন্যথায়, এটি আগে করা উচিত NB :: । এনএ এবং গ্লোবালের জন্য সম্মিলিত নামস্থানগুলির অঞ্চলটি নীচে অব্যাহত রয়েছে fn () সংজ্ঞা এবং মধ্যে প্রধান () ফাইলের শেষ পর্যন্ত কাজ করে।

NB নেমস্পেসের সম্প্রসারণ শুরু হয় int myVar2 = NB :: func (); মধ্যে fn () এর শেষে ব্লক এবং শেষ fn () সংজ্ঞা ব্লক।

বিঃদ্রঃ: যেসব নেমস্পেসের অঞ্চলগুলো যুক্ত হয়েছে তাদের বিভিন্ন নেমস্পেস ব্লকে একই ভেরিয়েবল নাম থাকা উচিত নয়, কারণ এটি এখনও দ্বন্দ্ব সৃষ্টি করবে।

নেমস্পেস অঞ্চল

একটি নামস্থান একটি সুযোগ। গ্লোবাল নেমস্পেস (গ্লোবাল স্কোপ) ছাড়াও যে কোনো নামস্থান ব্লকে ঘোষণা করা উচিত। সেই ব্লকটি সম্ভবত নেমস্পেসের সম্ভাব্য বিতরণকৃত অঞ্চলের প্রথম অংশ। নির্দেশিকা ব্যবহার করে, নামস্থান অন্যান্য ক্ষেত্রের অঞ্চল হিসাবে প্রসারিত করা যেতে পারে।

একটি নামস্থান সংস্থায় ঘোষিত সত্তাগুলি নামস্থানের সদস্য বলে বলা হয়, এবং এই ঘোষণাপত্রগুলি দ্বারা নামস্থান ঘোষণামূলক অঞ্চলে প্রবর্তিত নামগুলি নামস্থানের সদস্য নাম বলে।

নেস্টেড নেমস্পেস

নিম্নলিখিত প্রোগ্রাম নেস্টেড নেমস্পেস দেখায়:

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

নামস্থান A
{
intআমি= ;
নামস্থান খ
{
intআমি= 2;
নামস্থান C
{
intআমি= 3;
}
}
}

intপ্রধান()
{
খরচ<<প্রতি::আমি << '' <<প্রতি::::আমি << '' <<প্রতি::::::আমি << 'n';

প্রত্যাবর্তন 0;
}

আউটপুট হল:

1 2 3

লক্ষ্য করুন যে স্কোপ রেজোলিউশন অপারেটর ব্যবহার করে তিনটি মান অ্যাক্সেস করা হয়েছে।

স্ট্যান্ডার্ড নেমস্পেস

C ++ এর একটি লাইব্রেরি আছে যাকে স্ট্যান্ডার্ড লাইব্রেরি বলে। এই লাইব্রেরিতে বস্তু, ফাংশন এবং অন্যান্য সত্তার নামগুলি একটি নামস্থান থেকে যাকে স্ট্যান্ডার্ড নেমস্পেস বলা হয়, ঘন্টার । স্ট্যান্ডার্ড লাইব্রেরিতে সাব-লাইব্রেরি রয়েছে এবং এই সাব-লাইব্রেরির মধ্যে একটি হল iostream । দ্য iostream লাইব্রেরিতে বস্তু থাকে খরচ , যা কনসোলে (টার্মিনাল) ফলাফল পাঠাতে ব্যবহৃত হয়।

নাম খরচ মধ্যে থাকা আবশ্যক ঘন্টার নামস্থান ব্যবহার করা iostream সঙ্গে তার ঘন্টার নামস্থান, প্রোগ্রামটি নিম্নরূপ হওয়া উচিত:

#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

এর ব্যবহার লক্ষ্য করুন ব্যবহার নির্দেশ এবং ঘন্টার । শব্দটি #অন্তর্ভুক্ত একটি প্রি -প্রসেসর নির্দেশিকা এবং একটি সেমিকোলন দিয়ে শেষ হয় না। এটি তার নির্দেশের অবস্থানে iostream ফাইল অন্তর্ভুক্ত করে।

উপসংহার

একটি নামস্থান একটি সুযোগ। নামস্থান বর্ণনা (সংজ্ঞা) মৌলিক ঘোষণা এবং/অথবা C ++ বস্তু, ফাংশন এবং অন্যান্য সত্তার সংজ্ঞা রয়েছে। নেমস্পেস সংজ্ঞার বাইরে, সিনট্যাক্স দিয়ে নাম অ্যাক্সেস করা যায়, namespaceName :: name । গ্লোবাল নেমস্পেস (গ্লোবাল স্কোপ) ছাড়াও যে কোনো নামস্থান ব্লকে ঘোষণা করা উচিত। সেই ব্লকটি সম্ভবত নেমস্পেসের সম্ভাব্য বিতরণকৃত অঞ্চলের প্রথম অংশ। সঙ্গে ব্যবহার নির্দেশিকা অনুসারে, নেমস্পেস অন্যান্য ক্ষেত্রের অঞ্চল হিসাবে প্রসারিত করা যেতে পারে। যেসব নেমস্পেসের অঞ্চলগুলি একত্রিত হয়েছে তাদের বিভিন্ন নেমস্পেস ব্লকে একই পরিবর্তনশীল নাম থাকা উচিত নয়, কারণ এটি এখনও নামের দ্বন্দ্ব সৃষ্টি করবে।

ক্রিস