ورود

View Full Version : مخفی نمودن توابعی از کلاس پایه در کلاس مشتق



mr_esmaily
یک شنبه 19 تیر 1384, 18:16 عصر
سلام
امکانش هست توابعی از کلاس پایه را در کلاس مشتق شده از آن نداشته باشیم؟

محمد میرمصطفی
یک شنبه 19 تیر 1384, 23:22 عصر
class CBase{
public:
void a(){};
void b(){};
};
class CClass1 : CBase{
};
//---------------------------------------------------------------------------
CClass1 Class1;

sh_roohani
دوشنبه 20 تیر 1384, 09:38 صبح
ببخشید یعنی چی که توابع کلاس پایه رو تو کلاس مشتق شده نداشته باشیم؟ منظورتون که حتما private نیست؟ هست؟

mr_esmaily
دوشنبه 20 تیر 1384, 11:37 صبح
سلام

ببخشید یعنی چی که توابع کلاس پایه رو تو کلاس مشتق شده نداشته باشیم؟ منظورتون که حتما private نیست؟ هست؟
خیر.


class CBase{
public:
void a(){};
void b(){};
};
class CClass1 : CBase{
};
//---------------------------------------------------------------------------
CClass1 Class1;

منظورم این نبود.
برای روشن تر شدن مطلب CClass1 به تابع a دسترسی داشته باشد ولی به تابع b دسترسی نداشته باشد.

sh_roohani
دوشنبه 20 تیر 1384, 13:44 عصر
معذرت می خوام. انگار باز هم متوجه منظورتون نشدم. یعنی تابع b سطح دسترسی public داشته باشه و در عین حال CClass1 به اون دسترسی نداشته باشه؟

mr_esmaily
دوشنبه 20 تیر 1384, 13:51 عصر
سلام

معذرت می خوام. انگار باز هم متوجه منظورتون نشدم. یعنی تابع b سطح دسترسی public داشته باشه و در عین حال CClass1 به اون دسترسی نداشته باشه؟
بعنوان مثال از یک کلاس به نام Base دو کلاس دیگر درایو کنیم.
در کلاس Derived1 به تابعی در کلاس Base دسترسی داشته باشیم که در کلاس Derived2 به اون دسترسی نداریم.

Blaster
دوشنبه 20 تیر 1384, 19:21 عصر
نوع خاصی از وراثت وجود داره که به اون شمول می گن . یعنی داخل کلاس دوم یک نمونه از کلاس اول رو ایجاد می کنید و فقط توابع مورد نظر رو پیاده سازی می کنید.


class BASE {
public :
VISIBLE(){}
INVISIBLE(){}
};


class DERV{
BASE m_Parent;

public:
VISIBLE(){
m_Parent.VISIBLE();
}
operator BASE* (){
return (BASE*)&m_Parent;
}

};

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

mr_esmaily
دوشنبه 20 تیر 1384, 19:54 عصر
سلام
جالب بود ولی شما در روش فوق , از ترکیب یا Composition استفاده کردین ولی من می خوام بدونم امکان انجام عمل فوق , با استفاده صریح از ارث بری یا Inheritance هست یا نه؟

Blaster
سه شنبه 21 تیر 1384, 10:09 صبح
بله ، مشروط بر اینکه شما یک کلاس واسطه تعریف کنید و اعضایی رو که نمی خواین در کلاس وارث نمایش داده بشن رو به صورت private تعریف کنید و کلاس مورد نظر رو از اون کلاس واسطه مشتق کنید.