PDA

View Full Version : سوال: وراثت



hafez1
دوشنبه 22 خرداد 1391, 15:33 عصر
فرض کنیددو تا کلاس به صورت زیر داریم




class Base{
public:
void BPub();
private:
void BPriv();
};
class Derived : public Base {
public:
void DPub();
private:
void DPriv();
};

و همچنین داریم




void Derived :: DPriv () {
DPub () ;
BPub () ;
BPriv () ;
}

وهمچنین داشته باشیم:




void foo(Base *);
void bar(Derived *);

آیا بیان موارد زیر درست است؟




void main(){
Base b,*pb;
Derived d,*pd;

d.BPriv();

foo(&d);

bar(&b);

pb=&d;
pd=pb;
pd=(Base *)&b;
}


در کل چه اتفاقی می افتد؟

jannatmakan
چهارشنبه 24 خرداد 1391, 03:57 صبح
خوب فرض رو بر این می گیریم که مفاهیم وراثت رو به صورت تئوری بلد باشین . با این فرض، می ریم به سراغ توضیحات مختصری از کد:

کلاس Base شما، کلاس پدر هست. که همونطور که می بینید شامل دو قسمت سراسری (public) و محلی (private) هست. کلاس Drived هم که کلاس مشتق یا همون فرزند هست. که با توجه به این که شما دارید: class Derived : public Base پس بدین معنیه که کلاس Drived شما به تمام اعضای public کلاس base شما دسترسی داره . و نیاز نیست که اون ها رو مجدّداً در کلاس Drived تعریف کنید. و به عبارتی اون ها رو به ارث برده. مثل فرزندی که برخی از خصوصیات پدرش رو به ارث می بره. به خاطر همین هم شما مجازید که ار توابع سراسری base در drived هم استفاده کنید.
البته نمی دونم چرا کداتون اینطوری درج شده ولی به نظر می رسه که تعاریف موجود در تابع اصلی تون هم درست باشه.