ব্যক্তিগত এবং সুরক্ষিত সদস্য: সি ++


276

কেউ আমাকে মধ্যে পার্থক্য হিসেবে আলোকিত করতে পারি privateএবং protectedশ্রেণীর সদস্যদের?

আমি সর্বোত্তম অনুশীলন কনভেনশনগুলি থেকে বুঝতে পারি যে শ্রেণীর বাইরে বলা হয় না এমন ভেরিয়েবল এবং ফাংশনগুলি করা উচিত private- তবে আমার এমএফসি প্রকল্পের দিকে তাকালে এমএফসির পক্ষে মনে হয় protected

পার্থক্য কী এবং আমার কোনটি ব্যবহার করা উচিত?

উত্তর:


374

ব্যক্তিগত সদস্যরা তাদের সংজ্ঞায়িত ক্লাসের মধ্যেই অ্যাক্সেসযোগ্য।

সুরক্ষিত সদস্যগণ তাদের সংজ্ঞায়িত ক্লাসে এবং সেই শ্রেণিতে উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসে অ্যাক্সেসযোগ্য।

সম্পাদনা করুন: উভয়ই তাদের শ্রেণীর বন্ধুদের দ্বারা এবং সুরক্ষিত সদস্যদের ক্ষেত্রে, তাদের উত্পন্ন শ্রেণীর বন্ধুদের দ্বারা অ্যাক্সেসযোগ্য।

সম্পাদনা 2: আপনার সমস্যার প্রসঙ্গে যেটি বোঝায় তা ব্যবহার করুন। আপনি যখনই সংযুক্তি হ্রাস করতে এবং বেস ক্লাসের প্রয়োগ রক্ষা করতে পারেন তখনই সদস্যদের ব্যক্তিগত করার চেষ্টা করা উচিত, তবে যদি এটি সম্ভব না হয় তবে সুরক্ষিত সদস্যদের ব্যবহার করুন। ইস্যুটির আরও ভাল বোঝার জন্য C ++ FAQ দেখুন । সুরক্ষিত ভেরিয়েবল সম্পর্কে এই প্রশ্নটিও সহায়তা করতে পারে।


12
সি ++ প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী লাইট লিংক থেকে সরানো হয়েছে isocpp.org/wiki/faq/basics-of-inheritance
avner

134

A শ্রেণীর পাবলিক সদস্যরা সকলের এবং সবার জন্য অ্যাক্সেসযোগ্য।

A শ্রেণীর সুরক্ষিত সদস্যগণ এ এর ​​কোডের বাইরে অ্যাক্সেসযোগ্য নয়, তবে এ থেকে প্রাপ্ত যে কোনও শ্রেণির কোড থেকে অ্যাক্সেসযোগ্য is

এ শ্রেণীর ব্যক্তিগত সদস্যরা এ এর ​​কোডের বাইরে, বা এ থেকে প্রাপ্ত কোনও শ্রেণির কোড থেকে অ্যাক্সেসযোগ্য নয়

সুতরাং, শেষ পর্যন্ত, সুরক্ষিত বা বেসরকারীগুলির মধ্যে চয়ন করা নীচের প্রশ্নের উত্তর দিচ্ছে: উত্পন্ন শ্রেণীর প্রোগ্রামারটিতে আপনি কতটা আস্থা রাখতে চান?

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


উদ্ভূত বর্গটি আপনার শ্রেণীর এক ধরণের হওয়া উচিত এবং বেস শ্রেণীর সুরক্ষিত ডেটা প্রাপ্ত উত্পন্ন শ্রেণীর ডেটার অংশ। উত্পন্ন শ্রেণীর লেখক এই ডেটাটি সঠিকভাবে পরিচালনা করবেন বা এটি একটি বাগ is বেস ক্লাসে প্রাইভেট ডেটা হ'ল উদ্ভূত শ্রেণীর লেখক নিয়ন্ত্রণ করেন না।
ক্যাশকো

@CashCow the protected data of the base class is part of the data of the derived class.আসলে ই। তাহলে কি উত্তম নয়, উত্পন্ন শ্রেণীর লেখক সেই তথ্যটি আমার ক্লাসে পরিবর্তে তাদের ক্লাসে ঘোষণা করবেন? ... :-) ... The writer of the derived class is expected to handle this data properly or it is a bug.এনভিআই প্যাটার্নে, লক্ষ্য হ'ল সবকিছুকে ব্যক্তিগত করে তোলা পদ্ধতিগুলি, বংশোদ্ভূত শ্রেণীর লেখক হায়ারার্কির ক্ষতি করতে পারে তা সীমাবদ্ধ করতে। সুরক্ষিত পদ্ধতিগুলি ইতিমধ্যে একটি সম্ভাব্য সমস্যা। সুরক্ষিত রাষ্ট্র ব্যবহার করে আমি এটিকে বাড়িয়ে তুলতে পারছি না এটাই সঠিক পদ্ধতির।
প্যার্সেবল

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

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

63

সুরক্ষিত সদস্যদের উদ্ভূত ক্লাস থেকে অ্যাক্সেস করা যায়। ব্যক্তিগত বেশী পারে না।

class Base {

private: 
  int MyPrivateInt;
protected: 
  int MyProtectedInt;
public:
  int MyPublicInt;
};

class Derived : Base
{
public:
  int foo1()  { return MyPrivateInt;} // Won't compile!
  int foo2()  { return MyProtectedInt;} // OK  
  int foo3()  { return MyPublicInt;} // OK
};‌‌

class Unrelated 
{
private:
  Base B;
public:
  int foo1()  { return B.MyPrivateInt;} // Won't compile!
  int foo2()  { return B.MyProtectedInt;} // Won't compile
  int foo3()  { return B.MyPublicInt;} // OK
};

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


3
আমি পৃথক হতে অনুরোধ করছি: যদি কোনও দুর্বল সম্ভাবনা থাকে যে কোনও সাবক্লাসের এটি প্রয়োজন হয় না, তবে এটি ব্যক্তিগত করুন। আপনার ক্লাসটি সাবক্ল্যাসড করার ইচ্ছা না থাকলে , টেম্পলেট পদ্ধতির প্যাটার্নটি ব্যবহার করুন।
xtofl

23

এমএফসি সুরক্ষিত হওয়ার পক্ষে, কারণ এটি একটি কাঠামো। আপনি সম্ভবত এমএফসি ক্লাসগুলি সাবক্লাস করতে চান এবং সেই ক্ষেত্রে ক্লাসের সাধারণ ব্যবহারের জন্য দৃশ্যমান নয় এমন পদ্ধতিগুলি অ্যাক্সেস করার জন্য একটি সুরক্ষিত ইন্টারফেসের প্রয়োজন।


9

এটি সমস্ত কি আপনি করতে চান এবং উত্পন্ন ক্লাসগুলি দেখতে সক্ষম হতে চান তার উপর নির্ভর করে।

class A
{
private:
    int _privInt = 0;
    int privFunc(){return 0;}
    virtual int privVirtFunc(){return 0;}
protected:
    int _protInt = 0;
    int protFunc(){return 0;}
public:
    int _publInt = 0;
    int publFunc()
    {
         return privVirtFunc();
    }
};

class B : public A
{
private:
    virtual int privVirtFunc(){return 1;}
public:
    void func()
    {
        _privInt = 1; // wont work
        _protInt = 1; // will work
        _publInt = 1; // will work
        privFunc(); // wont work
        privVirtFunc(); // wont work
        protFunc(); // will work
        publFunc(); // will return 1 since it's overridden in this class
    }
}

6

হিসাবে চিহ্নিত হিসাবে চিহ্নিত বৈশিষ্ট্য এবং পদ্ধতিগুলি protected- ব্যক্তিগতগুলি থেকে আলাদা - এখনও সাবক্লাসে দৃশ্যমান।

আপনি সম্ভাব্য সাবক্লাসে পদ্ধতিটি ওভাররাইড করার সম্ভাবনাটি ব্যবহার করতে বা সরবরাহ করতে না চাইলে আমি সেগুলি তৈরি করব private


2
একটি উত্পন্ন শ্রেণি তার বেসের ব্যক্তিগত ভার্চুয়াল ফাংশনগুলিকে ওভাররাইড করতে পারে
জেমস হপকিন

6

নিশ্চিত কটাক্ষপাত করা সুরক্ষিত সদস্য ভেরিয়েবল প্রশ্ন। classকাপলিং হ্রাস করতে ডিফল্ট হিসাবে (যেমন সি ++ এসের মতো ) ব্যক্তিগত ব্যবহার করার পরামর্শ দেওয়া হয়। সুরক্ষিত সদস্য ভেরিয়েবলগুলি সর্বদা একটি খারাপ ধারণা, সুরক্ষিত সদস্য ফাংশনগুলি উদাহরণস্বরূপ টেমপ্লেট পদ্ধতি প্যাটার্ন হিসাবে ব্যবহার করা যেতে পারে।


মজার, আমি আপনার পোস্ট দেখার আগে আমি এটি আমার পোস্টে সম্পাদনা করেছি। উত্সাহিত করা হয়েছে কারণ একটি পালকের পাখি একই লিঙ্কে হোঁচট খায় :)
ফিরস আসাদ

4

সুরক্ষিত সদস্যরা কেবল শ্রেণির বংশধর এবং একই মডিউলে কোড দ্বারা অ্যাক্সেস করতে পারবেন। ব্যক্তিগত সদস্যরা কেবলমাত্র তাদের ঘোষিত শ্রেণীর দ্বারা এবং একই মডিউলে কোড দ্বারা অ্যাক্সেস করতে পারে।

অবশ্যই বন্ধু ফাংশন এটিকে উইন্ডোতে ফেলে দেয়, তবে ওহ ভাল।


4

ব্যক্তিগত সদস্যরা কেবল শ্রেণীর মধ্যে থেকে অ্যাক্সেসযোগ্য, সুরক্ষিত সদস্যগণ ক্লাস এবং উত্পন্ন ক্লাসে অ্যাক্সেসযোগ্য। এটি ওও ভাষাগুলিতে উত্তরাধিকারের বৈশিষ্ট্য।

সি ++ এ আপনার ব্যক্তিগত, সুরক্ষিত এবং সর্বজনীন উত্তরাধিকার থাকতে পারে যা উত্তরাধিকারের শ্রেণিবিন্যাসে উদ্ভূত শ্রেণীর দ্বারা অ্যাক্সেস করতে পারে তা নির্ধারণ করবে। উদাহরণস্বরূপ সি # এর জনসাধারণের উত্তরাধিকার রয়েছে।


3

প্রাইভেট = মাদারশিপ (বেস ক্লাস) দ্বারা অ্যাক্সেসযোগ্য কেবল (কেবলমাত্র আমার বাবা-মা আমার পিতামাতার শোবার ঘরে যেতে পারেন)

সুরক্ষিত = মাদারশিপ (বেস ক্লাস) দ্বারা অ্যাক্সেসযোগ্য এবং তার কন্যারা (যেমন কেবলমাত্র আমার পিতা-মাতা আমার পিতামাতার শোবার ঘরে যেতে পারেন তবে পুত্র / কন্যাকে পিতামাতার শোবার ঘরে যাওয়ার অনুমতি দিয়েছেন)

পাবলিক = মাদারশিপ (বেস ক্লাস), কন্যা এবং অন্য সবাই দ্বারা অ্যাক্সেসযোগ্য (অর্থাত্ কেবল আমার পিতা-মাতা আমার পিতামাতার শোবার ঘরে যেতে পারেন, তবে এটি একটি বাড়ির পার্টি - মাই কাসা সু কাসা)


2

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


আপনি সর্বদা শ্রেণীর ঘোষণায় প্রয়োগ করা একটি ইনলাইন ফাংশন ব্যবহার করতে পারেন। সংকলকটি এটিকে অপ্টিমাইজ করবে (এবং এটি কোনও ব্যক্তিগত সদস্যের ভেরিয়েবলের কেবল পঠনযোগ্য অ্যাক্সেস প্রয়োগের একটি ভাল উপায় হবে)।
পল স্যান্ডার্স

2

privateসদস্য তথ্য জন্য পছন্দসই হয়। সি ++ ক্লাসে সদস্যরা privateডিফল্টরূপে।

publicএটি সদস্যের কাজগুলির পক্ষে পছন্দসই, যদিও এটি মতামতের বিষয়। কমপক্ষে কয়েকটি পদ্ধতি অ্যাক্সেসযোগ্য হতে হবে। publicসকলের কাছে অ্যাক্সেসযোগ্য। এটি সবচেয়ে নমনীয় বিকল্প এবং কমপক্ষে নিরাপদ। যে কেউ এগুলি ব্যবহার করতে পারে এবং যে কেউ তাদের অপব্যবহার করতে পারে।

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

protectedএটি একটি আপোস কারণ এটি উত্পন্ন ক্লাসে ব্যবহার করা যেতে পারে। আপনি যখন কোনও শ্রেণি থেকে প্রাপ্ত হন, আপনার বেস বর্গ সম্পর্কে ভাল ধারণা থাকে এবং আপনি এই সদস্যদের অপব্যবহার না করার বিষয়ে সতর্ক হন।

এমএফসি উইন্ডোজ এপিআইয়ের জন্য একটি সি ++ র‌্যাপার, এটি পছন্দ করে publicএবং protected। ভিসুয়াল স্টুডিও দ্বারা উত্পন্ন ক্লাস উইজার্ডের একটি কুশ্রী মিশ্রণ আছে protected, publicএবং privateসদস্যরা। তবে নিজেরাই এমএফসি ক্লাসে কিছু যুক্তি রয়েছে।

সদস্য যেমন যেমন আপনার প্রায়শই এই সদস্যদের অ্যাক্সেস প্রয়োজন SetWindowTextarepublic

সদস্য যেমন OnLButtonDownউইন্ডো দ্বারা প্রাপ্ত নোটিফিকেশন হ্যান্ডেল। তাদের অ্যাক্সেস করা উচিত নয়, তাই তারা protected। এই ক্রিয়াকলাপগুলিকে ওভাররাইড করতে আপনি এখনও তাদের উদ্ভূত শ্রেণিতে অ্যাক্সেস করতে পারেন।

কিছু সদস্যকে থ্রেড এবং বার্তা লুপ করতে হয়, তাদের অ্যাক্সেস বা ওভাররাইড করা উচিত নয়, তাই তাদের হিসাবে ঘোষণা করা হয় private

সি ++ স্ট্রাকচারে সদস্যরা publicডিফল্টরূপে থাকে। কাঠামোগুলি সাধারণত ডেটাগুলির জন্য ব্যবহৃত হয়, পদ্ধতি নয়, তাই publicঘোষণাটি নিরাপদ বলে বিবেচিত হয়।


1
আপনি লিখুন "সি ++ ক্লাসে সদস্যগণ ডিফল্টরূপে সুরক্ষিত"। মান অনুসারে, সংজ্ঞাটিতে কোন কীওয়ার্ড ব্যবহৃত হয়েছিল তার উপর নির্ভর করে তারা ডিফল্টরূপে বেসরকারী বা পাবলিক হয় (১৪-৩)। মাইক্রোসফ্ট কি এখানে মান থেকে বিচ্যুত হয়?
আলেকজান্ডার ক্লাউয়ার

অ্যালেক্সান্দার ক্লাউয়ার আমি ভুল ছিলাম, এটি privateভিজ্যুয়াল স্টুডিওতে ডিফল্টরূপে। এটি privateজিসিসি-তেও ডিফল্টরূপে, এটি কখনও কখনও publicডিফল্ট হয় না। আমি ভুল না হলে। আপনি যে স্ট্যান্ডার্ডটি উল্লেখ করছেন তা আমি খুঁজে পাচ্ছি না।
বার্মাক শেমিরানী

দুঃখিত, আমি আরও নির্দিষ্ট করা উচিত ছিল। আমি সি ++ 17 মান উল্লেখ করছি। সি ++ 11 স্ট্যান্ডার্ডের 11MP তে একই শব্দ রয়েছে। আপনি আপনার উত্তর আপডেট করতে পারেন? ধন্যবাদ!
আলেকজান্ডার ক্লাউয়ার

1

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


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

  • সুরক্ষিত : এটি একটি অ্যাক্সেস নির্দিষ্টকরণকারীও। সি ++ এ, সুরক্ষিত সদস্যরা বর্গের মধ্যে এবং উত্তরাধিকার সূত্রে প্রাপ্ত শ্রেণিতে প্রবেশযোগ্য তবে শ্রেণীর বাইরে নয়। জাভাতে, সুরক্ষিত সদস্যরা বর্গের মধ্যে, উত্তরাধিকার সূত্রে প্রাপ্ত শ্রেণীর পাশাপাশি একই প্যাকেজের মধ্যে থাকা সমস্ত শ্রেণীর কাছে অ্যাক্সেসযোগ্য।


0

সুরক্ষিত ননস্ট্যাটিক বেস শ্রেণীর সদস্য নিম্নলিখিত বেস থেকে প্রাপ্ত যে কোনও শ্রেণীর সদস্য এবং বন্ধু দ্বারা নিম্নলিখিতগুলির একটি ব্যবহার করে অ্যাক্সেস করতে পারবেন:

  • প্রত্যক্ষ বা অপ্রত্যক্ষভাবে প্রাপ্ত ক্লাসের পয়েন্টার
  • প্রত্যক্ষ বা পরোক্ষভাবে উত্পন্ন শ্রেণীর একটি রেফারেন্স
  • প্রত্যক্ষ বা পরোক্ষভাবে উত্পন্ন শ্রেণীর একটি বস্তু

0

ব্যক্তিগত: শ্রেণীর সদস্য ফাংশন এবং বন্ধু ফাংশন বা বন্ধু শ্রেণীর দ্বারা অ্যাক্সেসযোগ্য। সি ++ শ্রেণির জন্য এটি ডিফল্ট অ্যাক্সেস সুনির্দিষ্ট।

সুরক্ষিত: শ্রেণীর সদস্য ফাংশন, ফ্রেন্ড ফাংশন বা ফ্রেন্ড ক্লাস এবং উত্সযুক্ত ক্লাস দ্বারা অ্যাক্সেসযোগ্য।

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

আরও বিস্তারিত জানার জন্য এই লিঙ্কটি দেখুন।


-2

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


5
আপনার উত্তর অন্যান্য উত্তরের তুলনায় কোন মান যুক্ত করে?
হারমান ডাপ্পেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.