الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أجعل صنفا يستخدم دوال صنفا أخر

بدأه 852147 في 15 سبتمبر 2008 · 7 رد · 778 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

المهم لدي سؤال

هو كالتالي .

لنفرض أن لدي صنف اسمه class1

class 1
{
protected:
...............
..........
..............

private:
.................
...............
.
...........
public:
...........

وصنف أخر اسمه class 2

كيف يككنني أن أستعمل دالة من دوال class 1 في الكلاس 2

علما أنها private

or protected

2-كيف يمكنني أن أجعل

class 1 وكل دواله الخاصة والعامة تصبح خاصة class 2

تم تعديل هذه المشاركة بواسطة 852147 في 15 سبتمبر 2008 في 15:54

#2

Inheritance

المتغيرات و الدوال Private لا يمكن توريثها لكن الدوال و المتغيرات الـ Public & Protected فقط هى التى تستطيع وراثتها

تم تعديل هذه المشاركة بواسطة Omar Eladel في 15 سبتمبر 2008 في 16:14

#3

مثل ماقال أخ عمر العادل

بالإضافة ان الدوال او الصفوف ال friend يمكنها استعمال محتوى private

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#4

فات على موضوع friends ده تماما (تقريبا عشان انا مش فاهمه شوية :D )

#5

وهذا مثال بسيط على كيفية استخدام friend


using namespace std;
class two;
class one
{
public:
void func1(){cout<<"Hi Hi\n";}
private:
void func2(){cout<<" I am Here\n";}
protected:
void func3(){cout<<" Thanks.....\n";}
friend class two;
};
//****************************************************
class two
{
public:
void func1(one c)
{
c.func2();
c.func3();
}
};
//******************************************************
int main()
{
two r;
one g;
r.func1(g);

return 0;
}
#include <iostream>

لاحظ وجود إعلان عن الكلاس two فى البدايه لأننا سنستخدمه فى جملة friend

واستخدام friend أتاح لدوال الكلاس two الوصول لجميع دوال الكلاس one

وللحديث بقيه....

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#6

السلام عليكم

وهذا مثال آخر للوراثه


using namespace std;
class one
{
public:
void func1(){cout<<"Hi Hi\n";}
private:
void func2(){cout<<" I am Here\n";}
protected:
void func3(){cout<<" Thanks.....\n";}
};
//****************************************************
class two:public one
{
public:
void test()
{
func1();
func2();
func3();

}
};
//******************************************************
int main()
{
two r;
r.test();
r.func1();
return 0;
}
#include <iostream>

بالطبع هذا المثال لن يعمل لماذا؟

لأن التوارث العام لا يسمح بالإبن two الا للوصول للأعضاء العامه والمحميه protected للأب

ومن هنا يعطى خطأ عن استدعاء الداله func2() من داخل الكلاس الإبن

ولو أبدلنا كلمة public بكلمة private ماذا سيحدث؟

class two: private one

هنا يتتحول الأعضاء العامه فى الكلاس الأب الى أعضاء private داخل الكلاس الإبن

وبالتالى فى هذه الحاله ينتج لنا خطأين

وشكرا

تم تعديل هذه المشاركة بواسطة amin_mu123 في 15 سبتمبر 2008 في 18:58

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#7

كما ذكر لك الأخوة يمكنك استخدام friend و لكن اعلم ان هذا يعني وجود مشكلة في التصميم, و لهذا اختفت فكرة الfriend من أي لغة اخرى, فهي أقرب الى ثغرة لحل مشكلة في التصميم

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

اهلا اخي ،

اقتباس
كيف يككنني أن أستعمل دالة من دوال Class 1 في الكلاس 2 علما أنها private or protected

حلين فقط يؤديان الى كود افضل من ناحية التصميم :

1- علاقة is-a ، وتتم عن طريق الوراثة .

حيث يرث الكلاس 2 من الكلاس 1 ، وبالتالي تم حل المشكلة .

2- علاقة has -a ، وتتم عن طريق وضع كائن من كلاس 1 في الكلاس 2 .

اقتباس
كيف يمكنني أن أجعل Class 1 وكل دواله الخاصة والعامة تصبح خاصة Class 2

هممم ، عن طريق التوارث الخاص private Inheritance

اذا حل مشكلتك هو الاتي :

class A
{
};

class B:private A
{

};

سلام

مواضيع مشابهة