2012-04-09 13 views
9

क्यों नहीं बना सकते हैं यदि कॉउट ओस्ट्रीम क्लास का ऑब्जेक्ट है, तो हम उसी वर्ग से 'आउट' कहें, क्यों नहीं अपना ऑब्जेक्ट घोषित कर सकते हैं। यानी, काम करने के लिए निम्नलिखित कोड नहीं है ??हम अपनी खुद की ओस्ट्रीम ऑब्जेक्ट

#include<iostream> 
using namespace std; 
int main() 
{ 
    ostream out; 
    out<<"something"; 
} 

या अन्यथा

#include<iostream> 
using namespace std; 
int main() 
{ 
    ostream_withassign out; 
    out<<"something"; 
} 
+1

यह क्या करेगा? आउटपुट कहां जाएगा? –

+3

'ostream_withassign' क्या होना चाहिए? – jrok

+0

आपको ऐसा क्यों लगता है कि ऐसा करना संभव नहीं है? –

उत्तर

0

आप ostream वस्तु सेट नहीं किया (क्या इस धारा उत्पादन के लिए करता है), बेशक आप इसका इस्तेमाल नहीं कर सकते। http://www.cplusplus.com/reference/iostream/ostream/ostream/
अर्थात

// ostream constructor 
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    filebuf fb; 
    fb.open ("test.txt",ios::out); 
    ostream os(&fb); 
    os << "Test sentence\n"; 
    fb.close(); 
    return 0; 
} 
+0

हम इस कोड को आउटपुट को आउटपुट भेजने के लिए कैसे कर सकते हैं जैसे कि कॉउट करता है? – user1232138

+0

@user - हम कुछ ओएस विशिष्ट ज्ञान का उपयोग किए बिना नहीं कर सकते हैं। यही कारण है कि हमारे पास मानक पुस्तकालय में पहले से ही 'cout' है। –

+1

@ user1232138 आप 'ओस्ट्रीम' से प्राप्त कर सकते हैं और ओस्ट्रीम के कन्स्ट्रक्टर पैरामीटर के रूप में 'cout's' rdbuf() 'पास कर सकते हैं। मुझे यकीन नहीं है कि यह एक अच्छा विचार है, हालांकि। – jrok

5

स्ट्रीम वस्तुओं एक बफर की आवश्यकता बाहरी उपकरण के लिए डेटा भेजने के लिए। मानक आउटपुट स्ट्रीम ऑब्जेक्ट, std::cout, एक बफर के साथ प्रारंभ किया जाता है जहां आपके आउटपुट दिखाई देने पर परिवहन को घेरता है।

std::ostream cout(/* buffer */); 

अपनी स्वयं की स्ट्रीम उद्देश्य यह है कि मानक धारा वस्तु होने का दिखावा करने के लिए, आप बस std::cout के बफर इसके निर्माता को पारित कर सकते हैं: यहाँ एक काल्पनिक उदाहरण है। ध्यान दें कि मैं व्यवहार में ऐसा करने की सिफारिश नहीं होगा:

std::ostream copy(std::cout.rdbuf()); // Note: not a *real* copy 

copy << "Hello World"; 
0

ostream वर्ग ios वर्ग से ली गई है। आईओएस वर्ग का निर्माता नीचे जैसा दिखता है।

public: explicit ios (streambuf* sb); 
protected: ios(); 

ios के डिफ़ॉल्ट निर्माता जिसका मतलब है सुरक्षित है और इसलिए आप वस्तु ostream के डिफ़ॉल्ट निर्माता का उपयोग नहीं बना सकते हैं।

ओस्ट्रीम की वस्तु बनाने के लिए केवल एक ही रास्ता स्ट्रीमबफ एसबी * तर्क का उपयोग कर रहा है।

std::ostream my_obj(std::cout.rdbuf()); 

इसी तरह, आप मूल्य से ओस्ट्रीम ऑब्जेक्ट्स को पास नहीं कर सकते हैं।

कारण

ios ios_base से ली गई है। इसकी प्रतिलिपि निर्माता निजी है।

protected: ios_base();  
private: ios_base (const ios_base&); 
संबंधित मुद्दे