मेरी इच्छा है कि मैं वर्चुअल बेस क्लास का ऑब्जेक्ट वापस कर सकता हूं ताकि मुझे मेमोरी मैनेजमेंट से निपटने की आवश्यकता न हो (फ़ंक्शन प्रोग्रामिंग का विचार भी इस प्रयास को उत्तेजित करता है)। इसका मतलब है कि मैं नीचे की तरह कुछ चीजें देख रहा हूँ:हमेशा इंटरफ़ेस डिज़ाइन में कक्षा में एक पॉइंटर वापस करना चाहिए?
class Car
{
public:
virtual int price() = 0 ;
virtual string brand() = 0 ;
}
class Interface
{
public:
virtual Car giveMeACar() = 0 ;
virtual vector<Car> listMeAllTheCars() = 0 ;
}
बहरहाल, यह भी कारण है कि कार एक सार इंटरफेस है संकलन नहीं होगा, एक त्रुटि संदेश के साथ:
अमान्य सार वापसी प्रकार सदस्य फ़ंक्शन '
virtual Car giveMeACar() = 0
; क्योंकि वर्चुअल फ़ंक्शंस के बाद शुद्ध 'Car
' के भीतर हैं:string brand()
; स्मार्ट सूचक उपयोग करने का विकल्प को खारिज -
तो, (उपयोग करने के बाद उदाहरण हटाना) का मतलब है कि मैं संशोधित करने के लिए अपने आप को नीचे और प्रबंधक स्मृति की तरह कुछ करने के लिए इंटरफ़ेस है करता है।
class Interface
{
public:
virtual Car* giveMeACar() = 0 ;
virtual vector<Car*> listMeAllTheCars() = 0 ;
}
मेरे सवाल यह है: यह मेरे पास है ही एकमात्र विकल्प है जब डिजाइन एक अंतरफलक जहां हर चीजों (वर्ग) सार है?
इंटरफ़ेस कक्षा का ऑब्जेक्ट लौटने से जावा में बिल्कुल मान्य है। सी ++ इस पहलू में कूड़े बिट वर्बोज़ और काउंटर सहज ज्ञान प्रतीत होता है। अक्सर, मुझे लगता है कि सी ++ "ऑब्जेक्ट प्रोग्रामिंग भाषा" के बजाय "प्रोग्रामिंग भाषा ऑब्जेक्ट करने के लिए सूचक" है क्योंकि पॉइंटर के बिना आपको ऑब्जेक्ट प्रोग्रामिंग का बहुत अधिक लाभ नहीं मिल सकता है।
+1 वर्चुअल फ़ंक्शंस बनाने के लिए निजी: – Chubsdad
@chubsdad: क्यों? यह मेरा इरादा नहीं है..मुझे सार्वजनिक – pierrotlefou
-1 का उपयोग करना चाहिए था, तो गैर वर्चुअल इंटरफेस मुहावरे देखें। उदाहरण के लिए, यदि सार्वजनिक विधियां वर्चुअल हैं तो आप अपने इंटरफ़ेस की सीमाओं पर इनवेरिएंट को लागू नहीं कर सकते हैं। –