2012-04-27 19 views
17

मैं फ़ंक्शन में फ़उट या कोउट पास करने का कोई तरीका ढूंढने का प्रयास कर रहा हूं। मुझे एहसास है कि इससे निपटने के लिए तर्कसंगत तरीके हैं, जैसे डेटा को आउटपुट करने वाले किसी भी फ़ंक्शन में ifs डालें या यहां तक ​​कि केवल दोनों तरीकों को फ़ंक्शन लिखें। हालांकि, यह आदिम और अक्षम लगता है। मुझे विश्वास नहीं है कि यह कोड कभी भी काम करेगा, मैं यह सुनिश्चित करने के लिए यहां डाल रहा हूं कि यह देखना आसान है कि मैं क्या करना चाहता हूं। कृपया ध्यान रखें कि मैं C++ का उपयोग करके एल्गोरिदम डिज़ाइन क्लास ले रहा हूं, मैं किसी भी तरह से अनुभवी सी ++ प्रोग्रामर नहीं हूं। मेरी कक्षा आपके द्वारा देखे गए हेडर का उपयोग करने तक ही सीमित है।क्या किसी फ़ंक्शन में कोउट या फउट पास करना संभव है?

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
void helloWorld(char); 
ofstream fout; 

int main() 
{ 
    fout.open("coutfout.dat"); 
    helloWorld(c); 
    helloWorld(f); 

    return 0; 
} 
void helloWorld(char x) 
{ 
    xout << "Hello World"; 
    return; 
} 

उत्तर

33

इन दोनों ostream से विरासत तो यह प्रयास करें:

void sayHello(ostream& stream) 
{ 
    stream << "Hello World"; 
    return; 
} 

फिर मुख्य में, ऑब्जेक्ट (कोउट या जो कुछ भी) में पास करें और इसे ठीक काम करना चाहिए।

+0

यह काम करता है! मुझे पता था कि यह उतना कठिन नहीं हो सकता जितना मैं इसे बना रहा था। बहुत बहुत धन्यवाद! – ChiefTwoPencils

+3

कोई समस्या नहीं है। बेस क्लास के लिए http://en.cppreference.com/w/cpp/io/basic_ostream देखें। –

+0

@ केविन आपके द्वारा दिए गए लिंक को पढ़ने के बाद, मुझे लगता है कि फ़ंक्शन को 'स्ट्रीम' को तर्क के रूप में दिया जाना चाहिए ... 'std :: ostream और sayHello (std :: ostream & stream) {वापसी स्ट्रीम <<" हैलो वर्ल्ड ";}' – GingerPlusPlus

12

हां। अपने कार्य हो

sayhello(std::ostream &os); 

फिर, समारोह में, आप osxout के स्थान पर उपयोग कर सकते हैं करते हैं।

(। जिस तरह से, using namespace std पूरे एसटीडी नाम स्थान उदासीनता और अनुशंसित नहीं है द्वारा एक using std::cout और जैसे सब ठीक है, हालांकि है।)

+0

धन्यवाद। मैंने देखा है कि प्रारूप सम्मेलन प्रतीत होता था। तो, क्या 'std :: cout' का उपयोग करके "शॉर्टकट" बनाते हैं जिससे' cout' का उपयोग करना संभव हो जाता है, लेकिन शेष std नेमस्पेस को व्यवहार में छोड़ दिया जाता है? – ChiefTwoPencils

+0

@ रॉबर्टो विल्को: यह सही है। 'Std :: cout' का उपयोग करने से तत्काल उपयोग के लिए वर्तमान नामस्थान में 'cout' नाम शामिल होता है (जो संयोग से इसका मतलब है कि आप तब भी' cout' नामक स्थानीय चर का उपयोग नहीं कर सकते हैं, यदि कोई था)। – thb