سلام خدمت دوستان عزیز. پست های قبلی رو خوندم یا اشتباه جواب داده شده و یا ناقص.
یک توصیه به هیچ عنوان از کتاب های فارسی برای یادگیری شی گرا استفاده نکنید و از مرجع انگلیسی استفاده کنید.
1: نمیتوانیم ازکلاس
Abstract
نمونه (شیئ) ایجاد کنیم. ولی از
Interface میشه.
2: کلاس Interface میتونه multiple-inherited بشه ، یعنی مثلا کلاس گربه از کلاس اینترفیس حیوان و کلاس اینترفیس چهار پایان ارث بری میکنه ولی کلاس ابسترکت نمیتونه
multiple-inherited بشه.
3: در Interface نمیتوتن data member داشته باشیم یعنی مثلا یک متغییر اینتیجر در private یا public. ولی در Abstract این امر امکان داره.
4: در Interface نمیتوانیم پیادهسازی متدی کنیم ولی در Abstract میتوانیم. مثلا یک تابع برای جمع دو عدد.
5:در Abstract حداقل باید یک pure virtual یا به عبارت دیگر یک Abstract یا به عبارت دیگر تابع virtual که مساوی 0 هست داشته باشیم و بقیه توابع میتواند نرمال باشد. ولی در Interface همه توابه باید pure virtual و تابع destructor باید virtual باشد نه pure virtual یعنی مساوی صفر نکنیم و وجودش ضروری هست.
class test // interface class
{
public:
virtual ~test(); // virtual function
virtual void method_1(int x) = 0; // pure virtual function || Abstract Member Function
virtual void method_2(int y) = 0; // pure virtual function || Abstract Member Function
virtual void methpd_3() = 0; // pure virtual function || Abstract Member Function
};
class test // abstract class
{
public:
virtual void method_1() = 0; // pure virtual function || Abstract Member Function
virtual void method_2(); // Virtual function. Non Abstract Member Function1
void method_3(); // Non Abstract Member Function1
};