PDA

View Full Version : سوال: كلاس هاي دوست



sia abedi
یک شنبه 05 مهر 1388, 00:19 صبح
همونطوري كه آقا نيما خواسته بودند براي سوال بعدي يك تاپيك جداگانه زديم
در صفحه ي 181 كتاب جعفر نژاد گفته كه كلاس ها را نيز مي توان دوست كلاس ديگري تعريف كرد.دراين حالت،كلاس دوست و تمام توبع عضو آن ، به اعضاي اختصاصي كلاس ديگر دسترسي دارند.
حلا مي‌خواستم بدونم كه آيا اين ارتباط يك طرفه است يعني فقط كلاس دوست مي‌تونه به اعضاي اختصاصي كلاس ديگر دسترسي داشته باشه و اون يكي كلاس نمي‌تونه به اعضاي اختصاصي كلاس دوست دسترسي داشته باشه؟
حالا اگر ارتباط يك طرفه است آيا ميشه كه دو هم كلاس اولي با دومي دوست باشه و هم دومي با اولي؟مطمئنم كه نفهميدي كه من چي گفتم و به مثال زير توجه كن تا منظورم را بفهمي:
class s
{توابع و متغير ها
friend calss b;
}
class b
{توابع و متغير ها
friend cass s;
}
يك سوال ديگه هم در باره‌ي اين مطلب داشتم و اون هم اينه كه مي‌خواستم بدون كه ميشه 3 يا بيشتر از 3 كلاس با هم دوست باشند؟

PC2st
یک شنبه 05 مهر 1388, 06:33 صبح
بله، همه این حالت‌هایی که گفتی، امکان‌پذیره، ولی در کلاس اول (کلاس s) اگه در جایی خواستی از نوع کلاس b استفاده کنی، همواره قبل از نوع کلاس b، کلمه کلیدی class هم بنویس، یا اینکه بجای اینکار، قبل از تعریف کلاس s، کلاس b رو اعلان کن بصورت زیر:


class b;

sia abedi
یک شنبه 05 مهر 1388, 16:10 عصر
بله، همه این حالت‌هایی که گفتی، امکان‌پذیره، ولی در کلاس اول (کلاس s) اگه در جایی خواستی از نوع کلاس b استفاده کنی، همواره قبل از نوع کلاس b، کلمه کلیدی class هم بنویس، یا اینکه بجای اینکار، قبل از تعریف کلاس s، کلاس b رو اعلان کن بصورت زیر:


class b;


كاملا منظورتون را نفهميدم

اگر اشتباه نكنم منظور شما اين بود كه:

حالا مي‌خواستم بدونم كه آيا اين ارتباط يك طرفه است يعني فقط كلاس دوست مي‌تونه به اعضاي اختصاصي كلاس ديگر دسترسي داشته باشه و اون يكي كلاس نمي‌تونه به اعضاي اختصاصي كلاس دوست دسترسي داشته باشه؟
يك سوال ديگه هم در باره‌ي اين مطلب داشتم و اون هم اينه كه مي‌خواستم بدون كه ميشه 3 يا بيشتر از 3 كلاس با هم دوست باشند؟
دو تا سوال بالا جوابش بله هست.


همه این حالت‌هایی که گفتی، امکان‌پذیره، ولی در کلاس اول (کلاس s) اگه در جایی خواستی از نوع کلاس b استفاده کنی، همواره قبل از نوع کلاس b، کلمه کلیدی class هم بنویس، یا اینکه بجای اینکار، قبل از تعریف کلاس s، کلاس b رو اعلان کن بصورت زیر:


class b;

اين آخري را هم كاملا نفهميدم

PC2st
یک شنبه 05 مهر 1388, 21:15 عصر
اگر اشتباه نكنم منظور شما اين بود ...
درسته منظورم همین بود.



اين آخري را هم كاملا نفهميدم
:) منظورم این بود:


class A
{
friend class B;

B a_variable; //ERROR!
};

class B
{
friend class A;
};

کد بالا صحیح نیست به دلیل اینکه در کلاس A، کامپایلر نمی‌دونه که B به چه صورت اعلان شده و نوع متغیر a_variable قابل تشخیص نیست، پس این کد باید بصورت زیر تغییر پیدا کنه:


class A
{
friend class B;

class B a_variable; //Fine :)
};

class B
{
friend class A;
};

یا بصورت زیر:


class B;

class A
{
friend class B;

B a_variable; //Fine :)
};

class B
{
friend class A;
};


در هر دو حالت، کامپایلر متوجه می‌شه که B یک نوع class هست.