मैं जब मैं इस संकलन के बारे में मैं अप्रयुक्त परम एक्स यह चेतावनी मिलती एक वैकल्पिक आभासी समारोहपैरामीटर खराब अभ्यास के साथ गैर शुद्ध वर्चुअल फ़ंक्शन हैं?
class Base {
virtual void OnlyImplementThisSometimes(int x) {}
};
के साथ एक आधार वर्ग की है। क्या कोई अन्य तरीका है जो मुझे वर्चुअल फ़ंक्शन को लागू करना चाहिए था? मैं इसे इस तरह फिर से लिखा है:
class Base {
virtual void OnlyImplementThisSometimes(int x)
{
x = 0;
}
};
मैं भी है कि अगर मैं सावधान नहीं हूँ, उपवर्ग मैं गलत समारोह लागू कर सकते हैं और फिर मैं क्योंकि ओवरलोडिंग की सूचना नहीं समस्या है: उदाहरण
class Derived : public Base {
void OnlyImplementThisSometimes(int x, int y) { // some code }
};
Derived d;
Base *b = dynamic_cast<Base *>(&d);
b->OnlyImplementThisSometimes(x); // calls the method in the base class
आधार वर्ग विधि क्योंकि मैं एक "int y" परम के साथ व्युत्पन्न समारोह लागू किया लेकिन इस बारे में कोई चेतावनी है बुलाया गया था। क्या सी ++ में ये सामान्य समस्याएं हैं या क्या मैंने वर्चुअल फ़ंक्शंस को गलत समझा है?
ऐसा करने का दूसरा तरीका (समान प्रभाव) परिवर्तनीय नाम इनलाइन पर टिप्पणी करना है, उदाहरण: int/* x * /। यदि परिवर्तनीय नाम वर्णनात्मक है (जो यह होना चाहिए), यह पाठकों की सहायता करेगा। – Nick
@ निक: मैं दृढ़ता से मजबूत प्रकार की सुरक्षा में विश्वास करता हूं, जहां प्रकार इरादे का वर्णन करता है (और तर्क भ्रम को रोकता है)। यदि आप (ज्यादातर) कोड इस तरह हैं, तो पैरामीटर नाम महत्वपूर्ण नहीं हैं। –
अंतिम अनुच्छेद सी ++ में 'ओवरराइड' कीवर्ड को दर्शाने के लिए संपादित किया जा सकता है। – Rotem