وراثت در C++ (مقدمات)
در زبان برنامه نویسی C++ هنگامی که کلاسی را بر اساس کلاس موجود دیگری تعریف می کنید، به کلاس جدید، "کلاس وارث" یا به انگلیسی Derived Class و به کلاس اولیه، "کلاس پایه" یا Base Class گفته می شود. کلاس های وارث به طور خودکار داری تمام داده ها و (با کمی محدودیت) تمام توابع عضو کلاس پایه هستند و به قول معروف این اعضا را به ارث می برند. البته کلاس پایه نیز همچنان دارای این اعضا خواهد بود و کلاس پایه هم می تواند علاوه بر این اعضا دارای اعضای اختصاصی خود باشد.
توابعی که از کلاس پایه برای کلاس وارث، اختصاص نمیابد، "توابع سازنده"، "تابع نابودگر" و توابعی هستند که عملگر جایگزینی ( = ) را سربارگذاری می کنند. دلیل آن هم این است که هر کلاس دارای توابع سازنده و نابودگر خاص خود است. برای مثال تمامی کلاس هایی که در محیط دات نت (تحت CLR ) تعریف می کنید به طور خودکار وارثی از کلاس Base Object Class هستند حال انکه بخواهید اینطور باشد یا نه؛ و البته همین کلاس ها نیز می توانند کلاس پایه برای کلاس های دیگر باشند.
نحوه ی تعریف یک کلاس وارث مشابه کلاس های دیگر است و تنها تفاوت ان با یک پلاس معمولی مجزا در این است که پس از نام آن، نام کلاس پایه ذکر می شود. در زیر مثالی ساده برای این مورد آورد شده است.
کلاس پایه :
class parent
{public:
bool flag;
string str;
}
کلاس وارث :
class child : parent
{public:
float f;
short int si;
}
در بالا، parent یک کلاس پایه و child یک کلاس وارث می باشد. به این معنی که داده های عضو کلاس parent (که شامل str و flag هستند) برای کلاس child نیز قابل استفاده هستند. برای مثال می توان به صورت زیر به متغیر عضو flag در کلاس دسترسی پیدا کرد.
child obj;
obj.flag = true;
البته نه به همین سرعت ! باید دقت داشته باشید "وراثت" به طور پیشفرض به صورت "خصوصی" یا private صورت میگیرد و هنگامی که وراثت به صورت خصوصی تعریف شود نمی توان به داده های عضو به ارث گذاشته شده، در خارج از کلاس دسترسی پیدا کرد و اگر بخواهید دستور بالا را به کار ببرید با خطای کامپایلر موجه خواهید شد که جمله ی بالا را به شما می گوید! برای تعریف وراثت کلاس به صورت "عمومی" یا public تنها کافی است قبل از نام کلاس پایه، کلمه ی public را اضافه کنید تا بتونید به اعضای داده ی به ارث گذاشته شده، در خارج از کلاس دسترسی داشته باشید.
class child : public parent;
+ نوشته شده در یکشنبه یکم بهمن ۱۳۹۱ ساعت 21:54 توسط MEC
|
GENERAL INFORMATION