کلاس Abstract توی c++ چیه ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کلاس Abstract توی c++ چیه ؟

+2 امتیاز
بعضی از کلاس های Qt با کلمه Abstract شروع میشن مثلا QAbstractAnimation  قضیه این Abstract چیه ؟ من هر کار کردم از این کلاس شی هم نتونستم بسازم !!
سوال شده آذر 7, 1392  بوسیله ی رامین قربانی (امتیاز 75)   5 11 15
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

اگر کلاسی کلیه متد هاش پیاده سازی نشده باشه آن وقت بهش میگن pure virtual که در این صورت معادل interface هستش اگر حداقل یک متد پیاده سازی نشده داشته باشه آن وقت کلاس abstarct هستش.

class MyInterface
{
public:
  virtual ~MyInterface() {}

  virtual void Method1() = 0;
  virtual void Method2() = 0;
};


class MyAbstract
{
public:
  virtual ~MyAbstract();

  virtual void Method1();
  virtual void Method2();
  void Method3();

  virtual void Method4() = 0; 
};

 

پاسخ داده شده آذر 7, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد آذر 8, 1392 بوسیله ی BlueBlade
چرا متد ها از نوع virtual تعریف میشن ؟
بخاطر اینکه کلاس هایی که از اون کلاس مشتق میشن بتونن همون متد را override کنند .مثلاً شما از کلاس اتومبیل 2 تا کلاس پراید و زانتیا مشتق می کنه شما میخای setGear را برای کلاس مشتق شده سفارشی کنی تو pride به فرض دنده 2 جا بخوره حداکثر شتاب می تونه 10 باشه و در زانتیا حداکثر شتاب می تونه 20 باشه
الان من چجوری از کلاس شما شی بسازم استفاده کنم این ارور میده که .
کلاس abstract واسه instance ساختن نیست باید فقط ازش کلاس دیگه را مشتق کنی.
+2 امتیاز
کلاس های Abstract کلاس هایی هستند که پیاده سازیشون به عهده برنامه نویس گذاشته شده ، یعنی برای متدهای اونها کدی نوشته نشده و برنامه نویس باید یک کلاس از اونها مشتق کنه و متدهای Abstract کلاس پدر رو درش پیاده کنه ، کلاس های Abstract یک جورهایی همون Interface هستند .
پاسخ داده شده آذر 7, 1392 بوسیله ی Felony (امتیاز 503)   2 3 10
البته ممکنه برای بعضی از متد هاشون کد نوشته شده باشه کلاسی که 1 دونه متد پیاده سازی نشده هم داشته باشه Abstract حساب میشه .
در تکمیل صحبتهای Felony باید بگم که تفاوت اصلی کلاسهای Abstract با Interface اینه که اگه یک کلاس مبتنی بر یک Interface باشه تا موقعی که همه متدهای اون اینترفیس رو پیاده سازی نکنیم برنامه کامپایل نمیشه ولی اگه کلاسمون مبتنی بر یک کلاس Abstract باشه با پیاده سازی نکردن متدهای موجود در کلاس ابسترکت پایه در کلاس جدید برنامه کامپایل میشه! یک تفاوت مهم دیگه اینه که یک کلاس میتونه به صورت همزمان از چند اینترفیس پایه استفاده کنه. قابلیت دیگه اینه که اینترفیس ها امکان مدیریت حافظه بهتری به ما می دهند که آقای Alister Christie در CodeRage 8 توضیحات مفصلی در این خصوص داده اند که می توانید برای کسب اطلاعات بیشتر به آن مراجعه کنید.
...