C ++ অ্যাক্সেস স্পেসিফায়ার

C Access Specifiers



C ++ এ, একটি শ্রেণী হল ভেরিয়েবল এবং ফাংশনের একটি সেট যা একসঙ্গে কাজ করার জন্য কনফিগার করা হয়েছে। যখন শ্রেণীর ভেরিয়েবলগুলিকে মান দেওয়া হয়, তখন একটি বস্তু পাওয়া যায়। একটি বস্তুর একই ভেরিয়েবল এবং ফাংশন একটি ক্লাসের মতো, কিন্তু এই সময়, ভেরিয়েবলের মান আছে। এক শ্রেণী থেকে অনেক বস্তু তৈরি করা যায়। অন্য বস্তুর ভেরিয়েবলের জন্য নির্ধারিত মানগুলির বিভিন্ন সেট অনুযায়ী একটি বস্তু অন্য বস্তুর থেকে আলাদা। একটি শ্রেণী থেকে একটি বস্তু তৈরি করা বস্তুকে তাত্ক্ষণিকভাবে বলা হয়। এমনকি দুটি ভিন্ন বস্তুর ভেরিয়েবলের জন্য একই মান থাকলেও, এই বস্তুগুলি বিভিন্ন সত্তা, প্রোগ্রামের বিভিন্ন নাম দ্বারা চিহ্নিত। কোনো বস্তুর ভেরিয়েবল এবং তার সংশ্লিষ্ট শ্রেণীকে বলা হয় ডেটা মেম্বার। কোনো বস্তুর কাজ এবং তার সংশ্লিষ্ট শ্রেণীকে সদস্য ফাংশন বলে। ডেটা সদস্য এবং সদস্য ফাংশন সদস্য বলা হয়।

অ্যাক্সেস শব্দের অর্থ একটি ভেরিয়েবলের মান পড়া বা পরিবর্তন করা, এবং এর অর্থ একটি ফাংশন ব্যবহার করা। C ++ অ্যাক্সেস স্পেসিফায়ার হল শব্দ, ব্যক্তিগত, সুরক্ষিত এবং সর্বজনীন। তারা সিদ্ধান্ত নেয় যে কোন সদস্য তার শ্রেণীর অন্যান্য সদস্যদের অ্যাক্সেস করতে পারবে কি না, অথবা যদি কোন ফাংশন বা অপারেটর ক্লাসের বাইরে এবং ক্লাসের অন্তর্গত না হয়ে ক্লাসের কোন সদস্যকে অ্যাক্সেস করতে পারে। তারাও সিদ্ধান্ত নেয় যে একটি প্রাপ্ত (শিশু) শ্রেণীর সদস্য অভিভাবক শ্রেণীর সদস্যকে অ্যাক্সেস করতে পারে কিনা।







এই নিবন্ধটি বুঝতে এবং প্রদত্ত কোডটি পরীক্ষা করার জন্য C ++ এর প্রাথমিক জ্ঞান প্রয়োজন।



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

পাবলিক এবং প্রাইভেট স্পেসিফায়ার

ক্লাস
একটি শ্রেণীর যে কোন সদস্য একই শ্রেণীর অন্য কোন সদস্যকে অ্যাক্সেস করতে পারে, যার মধ্যে থেকে স্বাধীন বা সরকারি লেবেলযুক্ত। নিম্নলিখিত প্রোগ্রাম বিবেচনা করুন:



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

শ্রেণীTheCla
{
ব্যক্তিগত:
intসংখ্যা 1;
intসংখ্যা 2;
জনসাধারণ:
TheCla(intn1,intn2)
{
সংখ্যা 1=n1;সংখ্যা 2=n2;
}
intপদ্ধতি()
{
প্রত্যাবর্তনসংখ্যা 1;
}
};

intপ্রধান()
{
TheCla obj(10,বিশ);
intনং 2=objপদ্ধতি();
খরচ<<নং 2<<'n';

// int no1 = obj.num1;

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

আউটপুট হল 10. ব্যক্তিগত সদস্য সংখ্যা 1 এবং সংখ্যা 2। পাবলিক সদস্যরা হল TheCla () এবং পদ্ধতি ()। উল্লেখ্য যে TheCla () হল কনস্ট্রাক্টর ফাংশন যা সুদের ভেরিয়েবল শুরু করে। একটি অ্যাক্সেস স্পেসিফায়ারের অঞ্চল তার লেবেল থেকে শুরু হয়ে ক্লাসের বর্ণনা (সংজ্ঞা) বা অন্য অ্যাক্সেস স্পেসিফায়ারের শুরুতে শুরু হয়।





প্রধান () ফাংশনে, প্রথম বিবৃতি হল তাত্ক্ষণিকভাবে কনস্ট্রাক্টর ফাংশন, যা num1 এবং num2 আরম্ভ করে। পরবর্তী বিবৃতিটি ক্লাসের পাবলিক সদস্য, পদ্ধতি () কে ডাকে।

এখন, ক্লাসের বর্ণনা (সংজ্ঞা), পাবলিক সদস্য ফাংশন, TheCla (), ব্যক্তিগত সদস্যদের অ্যাক্সেস করে, num1 এবং num2। এছাড়াও, পাবলিক সদস্য ফাংশন, পদ্ধতি (), ব্যক্তিগত সদস্য অ্যাক্সেস, num1। একটি বর্গ বিবরণের মধ্যে যে কোন সদস্য একই শ্রেণীর বর্ণনার মধ্যে অন্য কোন সদস্যকে অ্যাক্সেস করতে পারে; কোন সদস্য ব্যক্তিগত বা সর্বজনীন তা বিবেচ্য নয়।



যাইহোক, একটি ফাংশন বা অপারেটর যা ক্লাসের বিবরণে ঘোষণা করা হয়নি এবং বর্গের বর্ণের বাইরে কেবলমাত্র শ্রেণীর পাবলিক সদস্যদের অ্যাক্সেস করতে পারে। প্রধান () ফাংশন, উদাহরণস্বরূপ, একটি ফাংশন যা ক্লাসের বর্ণনার বাইরে ঘোষিত হয়। এটি শুধুমাত্র পদ্ধতি () এবং TheCla () পাবলিক সদস্যদের অ্যাক্সেস করতে সক্ষম হয়েছে। প্রধান () ফাংশনের ভিতরে, TheCla () ফাংশনটি obj (10, 20)।

একটি বাহ্যিক ফাংশন বা বাহ্যিক অপারেটর, যেমন প্রধান () ফাংশন, ক্লাসের কোনো প্রাইভেট মেম্বার, যেমন num1 বা num2 অ্যাক্সেস করতে পারে না। প্রধান () -এর শেষ-কিন্তু-একটি বিবৃতি থেকে মন্তব্য নির্দেশক, // সরান। আপনি যদি প্রোগ্রামটি সংকলন করার চেষ্টা করেন, মনে রাখবেন যে প্রোগ্রামটি সংকলন করবে না, একটি ত্রুটি বার্তা দেবে।

ডিফল্ট স্পেসিফায়ার
একটি ক্লাসের জন্য ডিফল্ট স্পেসিফায়ার ব্যক্তিগত। সুতরাং, উপরের শ্রেণীর বিবরণটি নীচের বর্ণনার মতোই, ব্যক্তিগত, কিন্তু স্পেসিফায়ার ছাড়া:

শ্রেণীTheCla
{
intসংখ্যা 1;
intসংখ্যা 2;
জনসাধারণ:
TheCla(intn1,intn2)
{
সংখ্যা 1=n1;সংখ্যা 2=n2;
}
intপদ্ধতি()
{
প্রত্যাবর্তনসংখ্যা 1;
}
};

বিঃদ্রঃ : অ্যাক্সেস স্পেসিফায়ার লেবেল স্পেসিফায়ার দিয়ে শুরু হয়, এবং তারপর একটি কোলন দ্বারা অনুসরণ করা হয়।

সুরক্ষিত স্পেসিফায়ার

একটি বর্গ বিবরণের মধ্যে, এবং একটি বাইরের ফাংশন বা বাইরের অপারেটর থেকে, সুরক্ষিত স্পেসিফায়ার প্রাইভেট স্পেসিফায়ারের মতই। এখন, উপরের প্রোগ্রামের প্রাইভেট স্পেসিফায়ারকে স্পেসিফায়ারের সাথে প্রতিস্থাপন করুন, প্রধান () ফাংশনের শেষ-কিন্তু-এক বিবৃতি থেকে মন্তব্য নির্দেশক, // সুরক্ষিত করুন এবং সরান। আপনি যদি প্রোগ্রামটি সংকলন করার চেষ্টা করেন, মনে রাখবেন যে প্রোগ্রামটি সংকলন করবে না, একটি ত্রুটি বার্তা দেবে।

সুরক্ষিত স্পেসিফায়ারের বিষয়টি উঠে আসে যখন প্রাপ্ত (উত্তরাধিকারসূত্রে) শ্রেণীর সদস্যদের অবশ্যই বেস (অভিভাবক) শ্রেণীর সদস্যদের অ্যাক্সেস করতে হবে।

পাবলিক ডেরিভেড ক্লাস পাবলিক সদস্যদের সাথে
নিম্নলিখিত প্রোগ্রাম বিবেচনা করুন:

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

শ্রেণীTheCla
{
জনসাধারণ:
intসংখ্যা 1= 10;
সুরক্ষিত:
intসংখ্যা 2= বিশ;
ব্যক্তিগত:
intসংখ্যা 3= 30;
};

শ্রেণীচাইল্ডক্লা: জনসাধারণTheCla
{
জনসাধারণ:
intপদ্ধতি 1()
{
প্রত্যাবর্তনসংখ্যা 1;
}
intপদ্ধতি 2()
{
প্রত্যাবর্তনসংখ্যা 2;
}
/*int পদ্ধতি 3 ()
{
রিটার্ন সংখ্যা 3;
} * /

};

intপ্রধান()
{
ChildCla childObj;
intনং 1=childObj।পদ্ধতি 1();
খরচ<<নং 1<<'n';

intনং 2=childObj।পদ্ধতি 2();
খরচ<<নং 2<<'n';

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

আউটপুট হল:
10
বিশ

বেস ক্লাসে, num1 সর্বজনীন, num2 সুরক্ষিত এবং num3 ব্যক্তিগত। উদ্ভূত শ্রেণীতে, সমস্ত সদস্য ফাংশন সর্বজনীন। প্রথম ফাংশন, পদ্ধতি 1 (), পাবলিক ডেটা সদস্য অ্যাক্সেস করে, সংখ্যা 1। দ্বিতীয় ফাংশন, পদ্ধতি 2 (), সুরক্ষিত ডেটা সদস্য অ্যাক্সেস, num2। তৃতীয় ফাংশন, পদ্ধতি 3 (), যদিও বর্তমানে মন্তব্য করা হয়েছে, ব্যক্তিগত ডেটা সদস্য অ্যাক্সেস করা উচিত, num3।

একটি অ্যাক্সেস স্পেসিফায়ার (পাবলিক, সুরক্ষিত, বা ব্যক্তিগত) ছাড়া একটি প্রাপ্ত শ্রেণী ঘোষণা করা হয় না। উপরে, প্রাপ্ত শ্রেণীটি পাবলিক স্পেসিফায়ারের সাথে ঘোষিত হয়, অর্থাৎ:

শ্রেণীচাইল্ডক্লা: জনসাধারণTheCla{}

এখন ডেরিভেটেড ক্লাসে তৃতীয় সদস্য ফাংশনের সংজ্ঞা আন-মন্তব্য করুন। আপনি যদি প্রোগ্রামটি সংকলন করার চেষ্টা করেন, মনে রাখবেন এটি সংকলন করবে না, একটি ত্রুটি বার্তা দেবে।

বিঃদ্রঃ : যখন সমগ্র উদ্ভূত শ্রেণী পাবলিক ঘোষণা করা হয়, তখন এর সদস্যরা বেস ক্লাসের ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে না। তবে এর সদস্যরা বেস ক্লাসের জনসাধারণ এবং সুরক্ষিত সদস্যদের অ্যাক্সেস করতে পারে। উপরের প্রোগ্রামটি এটিকে ব্যাখ্যা করে।

যাইহোক, মনে রাখবেন যে পাবলিক ডেরিভেটেড ক্লাসের একজন পাবলিক সদস্য বেস ক্লাসের একটি সুরক্ষিত সদস্যকে অ্যাক্সেস করতে পারে।

ডেরিভেড ক্লাস স্পেসিফায়ার এবং মেম্বার স্পেসিফায়ার

পাবলিক সদস্যদের সঙ্গে সুরক্ষিত ডেরিভড ক্লাস
নিম্নরূপ নিম্নোক্ত শ্রেণীর ঘোষণায় সুরক্ষিত পাবলিক স্পেসিফায়ার প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: সুরক্ষিতTheCla{}

প্রোগ্রামটি কম্পাইল করুন এবং চালান এবং লক্ষ্য করুন যে ফলাফল আগের মতই আছে।

সুতরাং, যখন সমগ্র প্রাপ্ত শ্রেণীকে সুরক্ষিত ঘোষণা করা হয়, তখন এর সদস্যরা বেস ক্লাসের ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে না। তবে এর সদস্যরা বেস ক্লাসের জনসাধারণ এবং সুরক্ষিত সদস্যদের অ্যাক্সেস করতে পারে। এটি একই রকম যখন প্রাপ্ত শ্রেণীটি সর্বজনীন ঘোষণা করা হয়।

বিঃদ্রঃ : পাবলিক ডেরিভেটেড ক্লাসের একজন সুরক্ষিত সদস্য বেস ক্লাসের একটি সুরক্ষিত সদস্যকে অ্যাক্সেস করতে পারে।

পাবলিক সদস্যদের সাথে প্রাইভেট ডেরিভেড ক্লাস
নিম্নোক্ত শ্রেণীর ঘোষণায় সুরক্ষিত স্পেসিফায়ারকে প্রাইভেট দিয়ে প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: ব্যক্তিগতTheCla{}

প্রোগ্রামটি কম্পাইল করুন এবং চালান এবং লক্ষ্য করুন যে ফলাফল আগের মতই আছে।

সুতরাং, যখন সমগ্র উদ্ভূত শ্রেণীকে ব্যক্তিগত ঘোষণা করা হয়, তখন এর সদস্যরা বেস শ্রেণীর ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে না। তবে এর সদস্যরা বেস ক্লাসের জনসাধারণ এবং সুরক্ষিত সদস্যদের অ্যাক্সেস করতে পারে। এটি একই রকম যখন উদ্ভূত শ্রেণীকে সুরক্ষিত বা সর্বজনীন ঘোষণা করা হয়।

সুরক্ষিত সদস্যদের সাথে পাবলিক ডেরিভেড ক্লাস
নিম্নোক্ত প্রোগ্রামটি টাইপ করুন, কম্পাইল করুন এবং চালান, যাতে পুরো উদ্ভূত শ্রেণী সুরক্ষিত থাকে এবং এর সদস্যরাও সুরক্ষিত থাকে। কিছু কোড সেগমেন্ট নিম্নরূপ:

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

শ্রেণীTheCla
{
জনসাধারণ:
intসংখ্যা 1= 10;
সুরক্ষিত:
intসংখ্যা 2= বিশ;
ব্যক্তিগত:
intসংখ্যা 3= 30;
};

শ্রেণীচাইল্ডক্লা: জনসাধারণTheCla
{
সুরক্ষিত:
intপদ্ধতি 1()
{
প্রত্যাবর্তনসংখ্যা 1;
}
intপদ্ধতি 2()
{
প্রত্যাবর্তনসংখ্যা 2;
}
/*int পদ্ধতি 3 ()
{
রিটার্ন সংখ্যা 3;
} * /

};

intপ্রধান()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
খরচ<
/*int no2 = childObj.method2 ();
খরচ<
প্রত্যাবর্তন 0;
}

প্রোগ্রামটি যেমন আছে তেমন কাজ করে। প্রোগ্রামটি কীভাবে টাইপ করা হয়েছে তার উপর ভিত্তি করে কোনও আউটপুট নেই এবং কোনও আউটপুট হওয়ার কথা নয়।

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

বিঃদ্রঃ : সুরক্ষিত প্রাপ্ত শ্রেণীর একজন সুরক্ষিত সদস্য বেস ক্লাসের সুরক্ষিত সদস্যকে অ্যাক্সেস করতে পারে।

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

যদি main () ফাংশনের দ্বিতীয় কোড সেগমেন্ট অ-মন্তব্য করা হয়, একই ব্যাখ্যা প্রযোজ্য হবে। অর্থাৎ, প্রধান () ফাংশন উদ্ভূত শ্রেণীর বা বেস শ্রেণীর সুরক্ষিত বা ব্যক্তিগত সদস্য অ্যাক্সেস করতে পারবে না। প্রাপ্ত শ্রেণীর একজন সুরক্ষিত সদস্য বেস ক্লাসের সুরক্ষিত সদস্যকে অ্যাক্সেস করতে পারে কিনা তা থেকে এটি স্বাধীন।

সুরক্ষিত সদস্যদের সাথে সুরক্ষিত ডেরাইভ ক্লাস
নিম্নরূপ নিম্নোক্ত শ্রেণীর ঘোষণায় সুরক্ষিত পাবলিক স্পেসিফায়ার প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: সুরক্ষিতTheCla{}

কোড সেগমেন্টগুলির মন্তব্যটি প্রধান () ফাংশনে ফিরিয়ে দিন, যদি এটি ইতিমধ্যে করা না হয়। প্রোগ্রামটি কম্পাইল করুন এবং চালান এবং লক্ষ্য করুন যে ফলাফলটি আগের মতোই রয়েছে।

সুরক্ষিত সদস্যদের সাথে প্রাইভেট ডেরিভেড ক্লাস
নিম্নোক্ত শ্রেণীর ঘোষণায় সুরক্ষিত স্পেসিফায়ারকে প্রাইভেট দিয়ে প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: ব্যক্তিগতTheCla

প্রোগ্রামটি কম্পাইল করুন এবং চালান এবং লক্ষ্য করুন যে ফলাফলটি আগের মতোই হবে।

প্রাইভেট মেম্বারদের সাথে পাবলিক ডেরিভেড ক্লাস
নিম্নরূপ নিম্নোক্ত শ্রেণীর ঘোষণায় প্রাইভেট স্পেসিফায়ারকে জনসাধারণের সাথে প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: জনসাধারণTheCla{}

প্রাপ্ত শ্রেণীর সদস্যদের ব্যক্তিগত করুন। প্রোগ্রাম কম্পাইল করুন এবং চালান। ফলাফল পাবলিক ডেরিভেড ক্লাস উইথ প্রোটেক্টেড মেম্বার্স কেস থেকে আলাদা নয়।

প্রাইভেট মেম্বারদের সাথে সুরক্ষিত ডেরিভড ক্লাস
নিম্নরূপ নিম্নোক্ত শ্রেণীর ঘোষণায় সুরক্ষিত পাবলিক স্পেসিফায়ার প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: সুরক্ষিতTheCla{}

প্রোগ্রাম কম্পাইল করুন এবং চালান। এই ফলাফল সুরক্ষিত সদস্যদের ক্ষেত্রে সুরক্ষিত ডেরিভেড ক্লাস থেকে আলাদা নয়।

প্রাইভেট সদস্যদের সাথে প্রাইভেট ডেরিভেড ক্লাস
নিম্নোক্ত শ্রেণীর ঘোষণায় সুরক্ষিত স্পেসিফায়ারকে প্রাইভেট দিয়ে প্রতিস্থাপন করুন:

শ্রেণীচাইল্ডক্লা: ব্যক্তিগতTheCla{}

প্রোগ্রাম কম্পাইল করুন এবং চালান। এই ফলাফল প্রাইভেট ডেরিভেড ক্লাস উইথ প্রোটেক্টেড মেম্বার্স কেস থেকে আলাদা নয়।

উপসংহার

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

বেস ক্লাসের সদস্যকে অবশ্যই সুরক্ষিত করতে হবে যাতে বেস ক্লাসের একজন প্রাইভেট মেম্বারকে ডেরিভেটেড ক্লাসের একজন সদস্য অ্যাক্সেস করতে পারে। বেস ক্লাসের এই সুরক্ষিত সদস্যকে বাইরের ফাংশন বা বাইরের অপারেটর দ্বারা বেস ক্লাসের ব্যক্তিগত সদস্য হিসেবে দেখা হয়।

একটি শ্রেণীর একজন পাবলিক মেম্বারকে বাইরের যেকোনো ফাংশন, বাইরের কোনো অপারেটর, অথবা একটি ডেরিভেটেড ক্লাস দ্বারা অ্যাক্সেস করা যায়।

একটি ক্লাসে কোন অ্যাক্সেস স্পেসিফায়ারের অনুপস্থিতিতে, ব্যক্তিগত স্পেসিফায়ার ধরে নেওয়া হয়। অর্থাৎ, ডিফল্ট অ্যাক্সেস স্পেসিফায়ার ব্যক্তিগত।

এই কাজে ব্যবহৃত রেফারেন্স