PDA

View Full Version : تعریف کردن یک تابع دوست برای چند تابع



ali_hbz
چهارشنبه 28 خرداد 1393, 21:38 عصر
سلام دوستان...چطور میشه برای چند کلاس یک تابع دوست تعریف کرد ؟

rahnema1
پنج شنبه 29 خرداد 1393, 09:49 صبح
سلام دوستان...چطور میشه برای چند کلاس یک تابع دوست تعریف کرد ؟


سلام
تو اینجا کلاس A به دو تابع print و main اجازه داده به عضو private اون یعنی a دسترسی داشته باشن اما دو کلاس B و C فقط به تابع print این اجازه را دادند. بنابراین اون عبارت آخر که کامنت شده اگه اجرا بشه خطا میده چون تابع main اجازه دسترسی به اعضای private از کلاسهای B و C را نداره

#include <iostream>
class A {
static const int a=1;
friend void print();
friend int main();
};
class B {
static const int b=2;
friend void print();
};
class C {
static const int c=3;
friend void print();
};
void print(){
std::cout<<A::a<<","<<B::b<<","<<C::c;
}
int main()
{
print();
std::cout<<A::a;
//std::cout<<B::b<<","<<C::c; //Error
}

ali_hbz
پنج شنبه 29 خرداد 1393, 10:01 صبح
سلام
تو اینجا کلاس A به دو تابع print و main اجازه داده به عضو private اون یعنی a دسترسی داشته باشن اما دو کلاس B و C فقط به تابع print این اجازه را دادند. بنابراین اون عبارت آخر که کامنت شده اگه اجرا بشه خطا میده چون تابع main اجازه دسترسی به اعضای private از کلاسهای B و C را نداره

#include <iostream>
class A {
static const int a=1;
friend void print();
friend int main();
};
class B {
static const int b=2;
friend void print();
};
class C {
static const int c=3;
friend void print();
};
void print(){
std::cout<<A::a<<","<<B::b<<","<<C::c;
}
int main()
{
print();
std::cout<<A::a;
//std::cout<<B::b<<","<<C::c; //Error
}


ممنون دوست عزیز...اما وقتی من این کار رو میکنم موقع تعریف تابع دوست متغیر های قسمت private رو نمیشناسه ! نمیدونم چیکار کنم؟!

مشکل اون سوال دوم نمیدونید کجاست ؟

rahnema1
پنج شنبه 29 خرداد 1393, 10:10 صبح
ممنون دوست عزیز...اما وقتی من این کار رو میکنم موقع تعریف تابع دوست متغیر های قسمت private رو نمیشناسه ! نمیدونم چیکار کنم؟!

یعنی دقیقا این چیزی که فرستادم اجرا می کنید جواب نمیده؟



مشکل اون سوال دوم نمیدونید کجاست ؟

دقیقا می خواهید چیکار کنید و چه جوابی می خواهید بگیرید؟

ali_hbz
پنج شنبه 29 خرداد 1393, 10:22 صبح
یعنی دقیقا این چیزی که فرستادم اجرا می کنید جواب نمیده؟

این کد که جواب میده ، اما کدی که خودم یه همچین چیزی میخوام درست کنم نمیدونم چرا کار نمیکنه عکش رو گذاشتم تا ببینید...دو تا کلاس هردو یه متغیر دارن مثلا به اسم hoqoq...میخوام این متغیر بین این دو تا کلاس اونی که بزرگتر هست رو چاپ کنم.

عکس کد (http://www.xum.ir/images/2014/06/19/0000000.jpg)



دقیقا می خواهید چیکار کنید و چه جوابی می خواهید بگیرید؟

اون کلاس داستانش از این قرار هست...تاریخ روز و ماه سال امروز رو بگیره بعد اگر تاریخ روز و ماه برابر بود با مقدار روز و ماه شی کلاس به اون شی تبریک تولدش رو بگه...اما نمیدونم چراو ​ما تو اون شرط کار نمیکنه و رو پاک کنم با روز فقط کار میکنه.

rahnema1
پنج شنبه 29 خرداد 1393, 10:32 صبح
دو تا کلاس هردو یه متغیر دارن مثلا به اسم hoqoq...میخوام این متغیر بین این دو تا کلاس اونی که بزرگتر هست رو چاپ کنم.

بعد از using namespace std این را بذارید

class main_teachers;



اون کلاس داستانش از این قرار هست...تاریخ روز و ماه سال امروز رو بگیره بعد اگر تاریخ روز و ماه برابر بود با مقدار روز و ماه شی کلاس به اون شی تبریک تولدش رو بگه...اما نمیدونم چراو ​ما تو اون شرط کار نمیکنه و رو پاک کنم با روز فقط کار میکنه.

ظاهرش که درست به نظر میاد شاید اشکال از جای دیگه باشه

ali_hbz
پنج شنبه 29 خرداد 1393, 10:47 صبح
بعد از using namespace std این را بذارید

ممنون ، حل شد.



ظاهرش که درست به نظر میاد شاید اشکال از جای دیگه باشه

لطفا کد دوم رو یه نگاه بندازید.

rahnema1
پنج شنبه 29 خرداد 1393, 10:57 صبح
ممنون ، حل شد.



لطفا کد دوم رو یه نگاه بندازید.

حالا فهمیدم تابع سازنده را یه چیزی جا گذاشته بودید یعنی ماه را مقدار دهی نکرده بودید

person(string name, string fname,int day, int month, int year, double tel) {this->fname=fname; this->name=name; this->tel=tel;this->day=day; this->month=month; this->year=year;}