2011-04-18 11 views
5

मान लीजिए foo एक सार एक सी ++ प्रोग्राम में class है, कारण है कि यह स्वीकार्य प्रकार foo* की चर घोषित करने के लिए है, लेकिन प्रकार foo की नहीं है?सार वर्ग घोषणाओं ++

+0

आप 'foo &' जैसे अमूर्त वर्गों के संदर्भ भी घोषित कर सकते हैं। – iammilind

+0

क्योंकि मैं सामान्य रूप से प्रकार के आकार की वस्तु को कुशल बनाना चाहता हूं (इस प्रकार मुझे एक सूचक या आकार के संदर्भ की आवश्यकता है)। लेकिन मैं निश्चित रूप से प्रकार के आकार की वस्तुओं को नहीं चाहता क्योंकि यह एक अमूर्त है, मुझे वर्गों या मंडलियों की वस्तुओं की आवश्यकता है। –

उत्तर

12

क्योंकि यदि आप एक foo घोषित करते हैं तो आपको इसे प्रारंभ/तत्काल करना होगा। यदि आप एक * foo घोषित करते हैं, तो आप इसे foo से प्राप्त कक्षाओं के उदाहरणों को इंगित करने के लिए उपयोग कर सकते हैं लेकिन सार नहीं हैं (और इस प्रकार तत्काल नहीं किया जा सकता है)

0

क्योंकि एक foo के लिए पॉइंटर एक foo नहीं है - वे पूरी तरह से हैं विभिन्न प्रकार। एक वर्ग सार बनाना कहता है कि आप कक्षा के प्रकार की वस्तुएं नहीं बना सकते हैं, न कि आप कक्षा में पॉइंटर्स (या संदर्भ) बना सकते हैं।

1

इसके अलावा के बाद से सार वर्गों आमतौर पर माता-पिता के रूप में उपयोग कर रहे हैं (आधार वर्ग - एबीसी) जो आप polymorphisem

class Abstract {} 

class DerivedNonAbstract: public Abstract {} 


void CallMe(Abstract* ab) {} 


CallMe(new DerivedNonAbstract("WOW!")); 
2

के लिए उपयोग करेंगे तो आपको एक अमूर्त वर्ग का दृष्टांत नहीं कर सकते। और निम्नलिखित घोषणाओं में अंतर है।

// declares only a pointer, but do not instantiate. 
// So this is valid 
AbstractClass *foo; 

// This actually instantiate the object, so not valid 
AbstractClass foo; 

// This is also not valid as you are trying to new 
AbstractClass *foo = new AbstractClass(); 

// This is valid as derived concrete class is instantiated 
AbstractClass *foo = new DerivedConcreteClass(); 
0

क्योंकि अगर हम foo कि meanz हम वर्ग foo का एक उदाहरण है जो एक सार है पैदा कर रहे ऐलान करते हैं और यह एक अमूर्त वर्ग के उदाहरण बनाने के लिए असंभव है। हालांकि, हम बहुरूपता के फायदे लेने के लिए अपने ड्राइव कक्षाओं को इंगित करने के लिए एक अमूर्त वर्ग के सूचक का उपयोग कर सकते हैं। । ।

संबंधित मुद्दे