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

لاأستطيع أن أورث صنف صنفا آخر أكثر من محدد وصول

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

لدي صنف اسمه a وصنف آخر اسمه b

ولكن عندما أورث الصنف b الصنف a

لايرث الا محدد الوصول الأول الذي كتبته

وهذا هو الكود

class a

{

public:

......

privtae::::

};

class b : privtae a , public a

{

.......................

};

الخطأ الذي يظهر هو

Error 1 error C2500: 'b' : 'a' is already a direct base class c:\documents and settings\xppresp3\my documents\visual studio 2005\projects\buffer by oop\buffer by oop\buufer by oop.cpp 110

ممكن المساعدة

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

#2

هل انت متأكد انه يمكنك عمل inheritance بالشكل هذا؟ اتوقع يجب ان تحدد هل الوراثة public او private ، ولا يمكنك تحديد الاثنين.

#3

المتغيرات الـ private لا يمكن وراثتها وهذا سبب تسميتها private. ;)

المحدد المحمي الذي يمكن وراثة اعضاءه هو protected, وليس private

class A
{
public:
	int item1;
protected:
	int item2;
private:
	int item3;
};

class B : public A
{
......
};

يمكن للصنف B الدخول لـ item1 و item2 فقط, وسيكون الدخول لـ item1 هو public ولـ item2 هو protected

يبدو إنك خلطت بين عملية وراثة صنف واحد, وعملية وراثة عدة اصناف, أنظر لهذا الكود:

class A
{
public:
	int itemA1;
protected:
	int itemA2;
private:
	int itemA3
};

class B
{
public:
	int itemB1;
protected:
	int itemB2;
private:
	int itemB3;
};

class C
{
public:
	int itemC1;
protected:
	int itemC2;
private:
	int itemC3;
};

class D : public A, protected B, private C
{
...
};

والآن, الصنف D يستطيع الدخول لـ itemA1 كـ public ولـ itemA2 كـ protected (أي تبقى محددات الدخول كما هي في الـ base class) وذلك هو تأثير الوراثة بإستخدام public

اما الأعضاء itemB1 و itemB2 فيصبح الإثنان protected في الصنف D, وذلك تأثير الوراثة بإستخدام protected

والأعضاء itemC1 و itemC2 فيصبح الإثنان private في الصنف D, وذلك تأثير الوراثة بإستخدام private

في جميع الأحوال لا يمكن توريث private (يمكن الدخول إلى عضو private من صنف آخر عن طريق إستخدام ميزة الـ friend.. ولكن ذلك موضوع آخر), ولا يمكن الوراثة من صنف واحد مرتين, إذ ليس لذلك معنى.

أتمنى اني استطعت المساعدة

:)

تم تعديل هذه المشاركة بواسطة SandHawk في 6 يوليو 2008 في 16:10

#4

SandHawak

كيف لا يمكن توريث private ؟

هي يعني ان الكود الذي كتبته انت خاطئ لوجود عنصر private في class A & B & C ؟

#5

لا يمكن وراثة عضو يستخدم المحدد private, ولكن لن يحصل خطأ يقاطع الترجمة حتى تحاول إستخدام العضو الـ private الموروث.

إذا لم تصدقني فجرب :)

ما هو الفرق بين protected و private برأيك؟

(بالمناسبة لقد جربت بنفسي كل شئ قبل ان اضع الرد هنا, تحديداً على مترجم GCC, كذلك فقد راجعت وثائق ++C حول الموضوع)

تم تعديل هذه المشاركة بواسطة SandHawk في 7 يوليو 2008 في 21:08

#6

بالنسبة للوراثة بإستخدا private يجب ان تتبعها بالدوال والعناصر التي تريد وراتثها بدون اعادة تعريف

مثل عندك الصفين a and b الصف a به الدوال الثالية c(){}

فإنك تكتب في الصف b الذي يرث خصوصي من a تكتب a::c فقط .

طيب بالنسبة ل public و private مع بعض هذا لم ينزل به كتاب او انسان من قبل .

اذا كان تعدد الأوجه قد يسبب bugs فما بالك بالجملة هذه .

اما استخدام private الصفوف من قبل صف آخر هناك طريقة واحدة فقط وهي استخدام الأصدقاء friends ونقطة الأخيرة التحايل في هذا المجال مفتوح لدرجة انك تقدر تصنع دالة ثابتة تتحكم في البريفيت بعمليات تسمى (القصر الوهمي) هو تحايل على الصف ولكن يجوز استخدامه :cash:

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

مدونة دوال

كيوتي العربي

#7

شكرا جميعا على المرور

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…