2010-07-24 9 views
5

नीचे दिए गए उदाहरण में, << ऑपरेटर क्या कर रहा है? मुझे लगता है कि यह थोड़ा सा ऑपरेटर नहीं है।<< ऑपरेटर सी ++ में क्या कर रहा है?

std::cout << "Mouse down @ " << event.getPos() << std::endl; 

मैं समझता हूँ कि क्या कोड यहाँ क्या करेंगे: बाहर मानक का प्रयोग करें, यह संदेश भेजने लाइन का अंत भेजें। कच्चे बाइनरी के अलावा बस मैं इस < < के उपयोग में कभी नहीं आया हूं।

मैं सी ++ के साथ शुरू कर रहा हूं। और, एक प्रकार के ऑपरेटर के रूप में, इसका विवरण खोजना और इसका क्या अर्थ है। क्या कोई मुझे प्रबुद्ध कर सकता है और/या मुझे पॉइंटर दे सकता है कि किसके लिए Google करना है?

धन्यवाद रॉस

+0

आप गलत हैं, क्योंकि यह @ को प्रतिस्थापित नहीं करेगा। – Puppy

उत्तर

11

उत्तर है: << ऑपरेटर अभिन्न प्रकार के लिए डिफ़ॉल्ट रूप से बदलाव छोड़ देता है, लेकिन इसे जो कुछ भी आप चाहते हैं उसे करने के लिए इसे ओवरलोड किया जा सकता है!

स्ट्रीम में स्ट्रिंग पाइपिंग के लिए यह वाक्यविन्यास पहले (मुझे लगता है) सी ++ आविष्कारक बजेर्ने स्ट्राउस्ट्रुप की नामांकित पुस्तक The C++ Programming Language में प्रदर्शित किया गया था। व्यक्तिगत रूप से, मुझे लगता है कि आईओ करने के लिए एक ऑपरेटर को फिर से परिभाषित करना नकली है; यह ठंडा दिखने वाला डेमो कोड बनाता है लेकिन कोड को समझने में योगदान नहीं देता है। एक तकनीक के रूप में ऑपरेटर ओवरलोडिंग प्रोग्रामिंग भाषा समुदाय में व्यापक रूप से आलोचना की गई है।


संपादित करें: के बाद से और कोई नहीं यह अभी तक का उल्लेख किया गया है:

operator<<ostream वर्ग, जिनमें से cout एक उदाहरण है में परिभाषित किया गया है। कक्षा परिभाषा iostream library में बैठती है, जो #include 'डी <iostream> है।

+0

मुझे लगता है कि यह वास्तव में कहने के लिए एक अच्छा टूल है कि आप अपने कोड में क्या चाहते हैं, और – rubenvb

+0

में पाइपिंग डेटा के लिए स्ट्रिंगस्ट्रीम और fstreams का उपयोग करते समय बहुत उपयोगी है, असल में, यदि आप पैडेंटिक बनना चाहते हैं, तो 'ऑपरेटर <<' एक निःशुल्क फ़ंक्शन है एक 'ostream' के रूप में यह पहला तर्क है। –

+0

@ बिली ओनेल: निश्चित रूप से आप मेरे जितने विशेषज्ञ हैं, लेकिन क्या यह 'ओस्ट्रीम' वर्ग का एक उदाहरण तरीका नहीं है, (जो भी सही है) अपने पहले तर्क के रूप में? –

-4

यह एक "बिटवाइज़ छोड़ पारी" ऑपरेटर है।

n < < पी

परिवर्तन n बाईं पी पदों के टुकड़े। शून्य बिट्स को निम्न-क्रम स्थितियों में स्थानांतरित किया जाता है। 3 < < 2 12.

सवाल यह अदालत 'जो वर्तमान आउटपुट धारा है में कुछ धक्का के संदर्भ में है।

+0

-1 इस संदर्भ में नहीं ... –

+0

@ निक ब्रूक्स: मैंने इसे थोड़ा सा स्पष्ट बनाने के लिए अपनी आखिरी पंक्ति संपादित की है, लेकिन संभवतः यह आपके उत्तर को नफरत से बचाने के लिए बहुत देर हो चुकी है। –

3

इसे कभी-कभी 'स्ट्रीम सम्मिलन ऑपरेटर' कहा जाता है, और यह सबसे आम उपयोग है: स्ट्रीम में डेटा डालने के लिए। कभी-कभी, उदाहरण के लिए, मैंने धारावाहिक जैसी चीजें करते समय अन्य वस्तुओं में डेटा डालने के लिए इसे ओवरलोड किया है।

3

सी ++, < < में किसी भी ऑपरेटरों की तरह संचालन कर रहा है। ओवरलोडिंग का उपयोग, ओस्ट्रीम बाएं ऑपरेंड के साथ (std :: cout ostream type का है), इसे विभिन्न प्रकार के डेटा प्रिंट करने के लिए स्ट्रीम ऑपरेटर के रूप में उपयोग किया जाता है। उदाहरण के लिए, आप

int x = 10; 
std::string y = " something"; 
std::cout << x << y << std::endl; 

हो जाएगा ताकि उत्पादन "10 कुछ" कर सकते हैं।

@ इस संदर्भ में कुछ भी नहीं बदला गया है। ऑपरेटर < < बस परिणाम डंप करें।

std :: endl न केवल लाइन का अंत है, बल्कि यह परिणाम आउटपुट डिवाइस को भी धक्का देता है।

+0

फ़्लैगिंग के लिए धन्यवाद '@' और std :: endl भी। – Ross

1

एक कार्यक्रम है जहाँ आप एक वस्तु बना सकते हैं और अतिभारित < < ऑपरेटर कॉल,

class x { 
    //declare some pvt variables 
    //overload << operator 
}; 

int main() { 
    x obj; 
    cout << obj; 
} 

लेखन ऐसा करके प्रयास करें आप निम्नलिखित बयान

cout << string_var << int_var; 

आप कर सकते हैं का उपयोग कर के पीछे तर्क समझ जाएगा उन वर्गों के रूप में 'स्ट्रिंग' और 'int' मानें जिन्हें < < ऑपरेटर ओवरलोड किया गया है, भले ही सत्य नहीं है।