কপি এবং মুভ কনস্ট্রাক্টর স্বয়ংক্রিয় বন্ধু?


14

আমরা অনুলিপি বা কনস্ট্রাক্টরদের স্থানান্তরিত করার সময় আমরা অন্য শ্রেণীর ব্যক্তিগত ভেরিয়েবলগুলি অ্যাক্সেস করতে পারি। সি ++ কী এগুলি friendএকে অপরের কাছে স্বয়ংক্রিয়ভাবে তৈরি করে?

উদাহরণ স্বরূপ:

my_str::my_str(my_str&& m) 
{
    size_ = m.size_; //accessing private variable another my_str class
    buff_ = m.buff_; //accessing private variable another my_str class
    m.buff_ = nullptr;
    m.size_ = 0;
}

7
এটি খুব একই শ্রেণি। তাই নে বন্ধুর দরকার।
এম স্পিলার

1
Stackoverflow.com/questions/6921185/… দেখুন - সংক্ষেপে, সি ++ এ অ্যাক্সেস নিয়ন্ত্রণ কেবলমাত্র বিভিন্ন ধরণের মধ্যে অবজেক্টের উদাহরণগুলির মধ্যে পার্থক্য করে না ।
ওসুকা_

আপনি যখন "অন্য একটি মাই_স্ট্রিস্ট ক্লাস" লিখবেন তখন এটি সোজা-আপ ভুল। এটি অন্য একটি মাইন্সট্রের উদাহরণ , এবং অন্যান্য মন্তব্য এবং উত্তরগুলি কী কী অন্তর্ভুক্ত তা ব্যাখ্যা করে
জোনাথনজ

উত্তর:


21

এটি বন্ধু হিসাবে বিবেচনা করা হয় না, তবে হ্যাঁ, শ্রেণীর যে কোনও সদস্যের কাজটি কেবলমাত্র উদাহরণ নয়, my_strসমস্ত ধরণের ব্যক্তিগতকৃত সদস্যদের অ্যাক্সেস করতে পারে :my_strthis

class my_str {
    void foo(my_str& other) {
        // can access private members of both this-> and other.
    }

    static void bar(my_str& other) {
        // can access private members of other.
    }
};

এর পিছনে সাধারণ ধারণাটি হ'ল একই ধরণের 2 বা ততোধিক বস্তু তাদের ব্যক্তিগত সদস্যদের প্রকাশ না করেই ইন্টারঅ্যাক্ট করার অনুমতি দেয়।


10

শ্রেণীর privateসদস্য সদস্যদের সবসময়ই সদস্যদের অ্যাক্সেস থাকে , সদস্য ফাংশনটি শ্রেণিবদ্ধ বা শ্রেণির বাইরে সংজ্ঞায়িত করা হয় এবং তা কোনও অনুলিপি / সরানো কনস্ট্রাক্টরের মতো বিশেষ সদস্য ফাংশন কিনা তা বিবেচনা করেই নয়।

অতএব তারা friendশ্রেণীর নয়, কারণ এটি কোনও অর্থ দেয় না। তারা ইতিমধ্যে শ্রেণীর অংশ are তবুও, তারা সমস্ত privateসদস্যের অ্যাক্সেস পেয়েছে, তারা friendএস কারণ নয় , তারা শ্রেণীর অংশ বলে।

যদি কোনও কনস্ট্রাক্টরে সদস্যদের আরম্ভ করা সম্ভব না হত (কারণ তারা অ্যাক্সেসযোগ্য) তবে সদস্য অ্যাক্সেসিবিলিটির পুরো ধারণাটি অর্থহীন হবে। (আপনি কীভাবে সদস্যকে সূচনা করবেন?)


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

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