2010-06-21 7 views
6

के रूप में, ऑपरेटर >> ऑपरेटर < < से मेल खाना चाहिए?क्या आप कक्षाओं के लिए ऑपरेटर << प्रारूपित करना चाहिए?

डाटाबेस उदाहरण:

ऑपरेटर >> निम्न स्वरूप के बारे में कुछ में पढ़ता हैं:

2 
Joe 500 20 1 
Bob 250 30 0 

चाहिए ऑपरेटर < < उत्पादन है कि? या इस तरह कुछ:

Record: 1/2 
Name: Joe 
Balance: 500 
Transactions: 20 
Premium Account: Yes 

और उसके बाद एक अलग लेखन फ़ाइल() फ़ंक्शन है?

मैं जानता हूँ कि या तो काम करेगा, लेकिन क्या है "मानक स्वीकार किए जाते हैं"?

उत्तर

7

आप एक प्रकार है कि एक विशेष प्रारूप में डेटा पढ़ता है, तो अगर आप एक ही प्रकार के लिए एक ostream operator<< अधिभार लागू करने के लिए एक IStream operator>> अधिभार है, तो यह एक ही प्रारूप (अन्यथा में उत्पादन, यह काफी भ्रमित हो सकता है चाहिए)।

3

ऑपरेटर ओवरलोडिंग इस तरह की IMO एक बड़ा दुरुपयोग और गलत धारणा है। ओवरलोडिंग का उपयोग करें जहां यह वास्तव में कुछ समझ में आता है।

डीबग प्रयोजनों के लिए, toString() है और इसे कॉल करने के लिए < < ओवरराइड करें। ओवरराइड न करें >> बिल्कुल भी।

>> और << आम तौर पर उपयोगकर्ता के साथ संचार के लिए नहीं, नदियों को धारावाहिक डेटा भेजने के लिए काम करते हैं।

मेरे 2 यूरोसेंट।

+2

मैं असहमत हूं: यदि आप किसी स्ट्रीम से डेटा को पढ़ने या लिखने का इरादा रखते हैं, तो "स्ट्रीम ऑपरेटर" को अधिभारित करना सरल और बेवकूफ दोनों है। –

+0

आप सही हैं - मैं जोड़ने था कि मेरे जवाब देने के लिए जब आप लिख रहे थे इस :) –

0

दोनों या एक दूसरे से स्वतंत्र, अपने आप उन्हें ओवरलोड सकते हैं के अनुसार।

+1

मैं ओपी कि जानता है लगता है। वह पूछ रहा है कि ऐसा करने का अच्छा विचार है या नहीं। उदाहरण के लिए, आप ओवरलोड कर सकते हैं && लेकिन सामान्य रूप से आपको ऐसा करने से बचना चाहिए। –

+0

@ बिली या, आप सही हैं। लेकिन ओवरराइडिंग << लगातार जांच के लिए हमेशा अच्छा होता है (जब आप कोडिंग कर रहे होते हैं)। – prabhakaran

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