2016-02-19 11 views
26

मान लीजिए मैं एक आभासी समारोह F() साथ वर्ग A है:अंतर

class A 
{ 
    virtual void F() 
    { 
     // Do something 
    }; 
}; 

और मैं किसी अन्य वर्ग B जो A और विरासत हैF() को पुनर्परिभाषित:

class B : A 
{ 
    void F() 
    { 
     // Do something 
    }; 
}; 

और एक अलग वर्ग C जो A भी प्राप्त करता है लेकिन ओवरराइडF():

class C : A 
{ 
    void F() override 
    { 
     // Do something 
    }; 
}; 

कक्षाएं B और C में F() के बीच क्या अंतर है?

उत्तर

24

B::f() और C::f() दोनों ओवरराइड हैं और वे बिल्कुल समान हैं।

override अनिवार्य रूप से एक संकलन समय सलाहकार शब्द है कि एक संकलन त्रुटि अगर समारोह एक आधार वर्ग में करता है नहीं ओवरराइड एक कारण होगा है।

यह प्रोग्राम स्थिरता में मदद कर सकता है: यदि नाम और पैरामीटर प्रकार A::f() बदल दिए गए हैं, तो संकलन त्रुटि परिणामस्वरूप होगी।

29

दोनों ओवरराइड हैं।

आप कीवर्ड override का उपयोग करते हैं तो आप एक संकलन विफलता सुनिश्चित करता है, तो यह होना चाहिए नहीं एक ओवरराइड हो।

और यह अच्छी प्रथा है।

+3

गिट – Tgsmith61591

+0

@ Tgsmith61591: हाँ जैसे रिपोजिटरी को समझते समय पठनीयता कारक का उल्लेख नहीं करना चाहिए। मैंने यह भी सोचा कि ओवरराइड किए बिना ओवरलोड (अनिवार्य रूप से "फिर से परिभाषित") का उदाहरण शामिल करना है या नहीं। लेकिन मैंने संक्षिप्त होने का फैसला किया। :) –