क्लास कैलेंडर पर विचार करें जो डेट ऑब्जेक्ट्स का एक गुच्छा स्टोर करता है। कैलेंडर को किसी भी प्रकार की ऑब्जेक्ट्स का संग्रह रखने के लिए डिज़ाइन किया गया है जो दिनांक से प्राप्त होता है। मैं सबसे अच्छा तरीका करने के लिए सोचा था कि यहसी ++: पॉलिमॉर्फिक क्लास टेम्पलेट
template<typename D> class Calendar{
...
}
के रूप में एक वर्ग टेम्पलेट इस तरह है लेकिन यह मुझे लगा कि डी अब वास्तव में किसी भी वर्ग हो सकता है। मेरा प्रश्न अब है, मैं कैसे सुनिश्चित कर सकता हूं कि डी दिनांक वस्तु का उप-वर्ग है?
मुझे पता है कि यह जावा कैसे करें, लेकिन मैं अभी भी सी ++ वाक्यविन्यास से अपरिचित हूं। समस्या बहुत समान है कि कुछ संग्रह केवल टेम्पलेट चर ले सकते हैं जो तुलनात्मक लागू करते हैं। हैडर तो
public class Calendar<D extends Date>{
...
}
-------------------- संपादित करें कुछ ऐसा दिखाई देगा: -------------- ----------------------------
टेम्पलेट तर्क परिभाषित करता है कि कैलेंडर किस वास्तविक दिन को संदर्भित करता है। विभिन्न दिनांक प्रकार उसी प्रारूप को विभिन्न प्रारूपों में संदर्भित करते हैं। उदाहरण के लिए, यदि मैं Calendar<Gregorian>
बना देता हूं तो यह अन्य Date
प्रारूप में दिनांक लेने में सक्षम होगा, जूलियन कैलेंडर या किसी अन्य दिनांक प्रारूप का कहना है और उन्हें ग्रेगोरियन प्रारूप में प्रस्तुत करें। यह विभिन्न दिनांक प्रारूपों में कैलेंडर के बीच रूपांतरण के लिए सक्षम बनाता है। इसलिए, यदि मेरे पास Calendar<Gregorian>
है तो मैं इसे आसानी से Calendar<Julian>
में परिवर्तित कर सकता हूं। उसके बाद निम्न संभव है:
Calendar<Gregorian> cal;
std::cout << "These events are entered as dates in
the Gregorian calendar" << std::endl;
cal.add_event("Christmas", 12, 25);
cal.add_event("Gregorian new year", 1, 1);
std::cout << cal << std::endl;
std::cout << "----" << std::endl;
std::cout << "And printed out as Julian dates" << std::endl;
Calendar<Julian>(cal);
std::cout << cal<< std::endl;
और आउटपुट:
These events are entered as dates in the Gregorian calendar
2009-12-25 Christmas
2010-01-01 Gregorian new year
----
And printed out as Julian dates
2009-12-13 Christmas
2009-12-19 Gregorian new year
------------- न्यू संपादित करें: ----------- -----------
अंतिम संपादन अब और अधिक समझ में आता है। स्वरूपण के साथ मुझे थोड़ा असहमति थी।
सभी उत्तरों के लिए धन्यवाद।
मैं अपने तीसरे वर्ष में कंप्यूटर साइंस छात्र हूं, और मैं कहूंगा कि मैं ओओ और पॉलीमोर्फिज्म जैसे संबंधित अवधारणाओं से काफी परिचित हूं। इस पोस्ट का उद्देश्य यह पता लगाना था कि क्या कोई था या नहीं एक टेम्पलेट तर्क के लिए एक शर्त व्यक्त करने के लिए सी ++ में जिस तरह से यह जावा में है और एक संक्षिप्त, सुरुचिपूर्ण और सहज ज्ञान युक्त समस्या को हल करें।
* तारीख * के उप-वर्ग होने की आवश्यकता क्यों है? जब तक यह एक तिथि के रूप में व्यवहार करता है (सही सदस्यों का खुलासा करता है), इसे तिथि के रूप में इलाज करने में क्या गलत है? – jalf