سؤال

أنا أكتب بعض الكود حيث حددت الفئة الأساسية التالية.

class Chorus{
  public:

    //Destructor
    virtual ~Chorus();

    //callback function
    virtual int callback( void *outputBuffer, void *notUsed, unsigned int 
       nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData );

    virtual void initializeDelayBuffer(void);

    virtual void destroyDelayBuffer(void);
};

أريد أن أستخدم هذا كصف أساسي ولا أفعل أي شيء في الواقع بمفرده. لذلك لدي فصول منفصلة مشتقة من جوقة الفئة هذه. أردت أن أفعل هذا ببساطة تقديم بعض القيود الأساسية فيما يتعلق بأي فئة تشورس مشتقة يجب يجب أن تعتبر صالحة للاستعمال في برنامجي.

عندما أقوم ببناء مشروعي (Visual Studio 2008)، أحصل على أخطاء رمز خارجية دون حل حول جميع الوظائف الافتراضية من فئة جوقة هذه. أنا أظن أنه الخطأ النموذجي حيث لم أقدم تصريحات هذه الوظائف. ولكن، نظرا لأنهم افتراضيون ولا أريدهم أن يتم تعريفهم بالفعل للقيام بأي شيء حتى يتم تعريفهم داخل الفئات المستمدة، ماذا أفعل لحل هذه المشكلة؟

هل كانت مفيدة؟

المحلول

إذا كانت نيتكك هي ببساطة وضع حاملي لفئات الأطفال لتنفيذها، فاجعلها وظائف افتراضية نقية من خلال إنهاء = 0. على سبيل المثال

virtual void destroyDelayBuffer(void) = 0;

هذا يجعل الطريقة "مجردة" حتى التحدث. لن يبحث برنامج التحويل البرمجي C ++ عن التعريف الفعلي للطريقة ولكن بدلا من ذلك سيجبر جميع الفئات المشتقة على تنفيذ هذه الأساليب قبل إنشاء مثيل.

نصائح أخرى

تحتاج إلى إعلان تلك الوظيفة بأنها افتراضية نقية.

Viardual Void InitedLayBuffer (باطلة) = 0؛

سيؤدي ذلك إلى إنشاء واجهة من الأنواع، وهو ما تريده.

وهذا ما يسمى وظيفة افتراضية نقية. في C ++، تكتب "= 0" بعد اسم الوظيفة، ولكن ربما ترغب في قراءة الأسئلة الشائعة على هذه.

http://www.parashift.com/c+--faq-lite/abcs.html#FAQ-22.4.

تحتاج إلى تحديد الوظائف كوظائف افتراضية نقية. للقيام بذلك، أضف "= 0" بعد كل إعلان. علي سبيل المثال:

virtual void destroyDelayBuffer(void) = 0;

استخدام وظيفة افتراضية نقية:

  virtual int callback( void *outputBuffer, void *notUsed, unsigned int 
       nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData ) = 0;

فقط للإضافة إلى الإجابات أعلاه، لا يمكنك إنشاء كائن من فئة تحتوي على وظائف افتراضية نقية، لذلك في المستقبل إذا كنت تنوي أن يكون لديك كائنات من فئة الأساس الخاصة بك، تذكر أن تجعل وظيفة الظاهري غير النقي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top