2010-04-10 18 views
6

में ओवरलोडिंग सी ++ में, मैं कुछ इस तरह कर रही है, उसे किसी खास वर्ग पर ऑपरेटर बदल सकते हैं:ऑपरेटर सी

MyClass::operator==/*Or some other operator such as =, >, etc.*/(Const MyClass rhs) { 
    /* Do Stuff*/; 
} 

लेकिन वहाँ सी में कोई वर्गों (डिफ़ॉल्ट रूप से में निर्मित) किया जा रहा है तो साथ, कैसे क्या मैं सामान्य कार्यों के लिए ऑपरेटर ओवरलोडिंग कर सकता हूं?

उदाहरण के लिए, अगर मुझे सही याद है, तो stdlib.h आयात करना आपको -> ऑपरेटर देता है, जो कि (* strcut_name) .struct_element के लिए सिंटैक्टिक चीनी है।

तो मैं सी में यह कैसे कर सकता हूं?

धन्यवाद।

+0

मुझे यकीन नहीं है कि आप "कक्षाओं (डिफ़ॉल्ट रूप से निर्मित)" कहकर कह रहे हैं, लेकिन सी, अवधि में कोई कक्षा नहीं है। अंतर्निर्मित या अन्यथा। और आप कार्यों के लिए ऑपरेटर ओवरलोडिंग का क्या मतलब है? यह समझ में नहीं आता है। – meagar

+0

ठीक है, आप क्लास के साथ सी में ऑब्जेक्ट-मॉडल बना सकते हैं, लेकिन यह सादे सी सिंटैक्स के अलावा सिंटैक्स का उपयोग नहीं करेगा। इस पर मेरे प्रयासों के लिए, http://jonsterling.github.com/2009/08/28/implementing-object-oriented-programming-in-pure-c.html और http://jonsterling.github.com/2009 देखें /09/07/object-oriented-programming-in-c-mark-two.html। –

+0

योनातन के पास उचित अंतर्ज्ञान था कि मैं क्या पीड़ित था। मैं कह रहा था कि आप सी को ओओपी मॉडल में मजबूर कर सकते हैं। वास्तव में –

उत्तर

15

सादा पुरानी सी में ऑपरेटर ओवरलोडिंग किसी भी रूप में नहीं है। पॉइंटर के सदस्य तक पहुंचने के लिए -> "ऑपरेटर" मानक सी है और किसी भी शीर्षलेख फ़ाइल द्वारा प्रस्तुत नहीं किया गया है।

+0

। '-> 'केवल विशेष वाक्यविन्यास है क्योंकि structs के पॉइंटर्स बहुत आम हैं। – avpx

+0

मैं देखता हूं। इसलिए, मूल रूप से, ऑपरेटर ओवरलोडिंग का एकमात्र प्रकार प्रीप्रोसेसर निर्देश का कुछ प्रकार होगा, कहें: # परिभाषित प्लस (ए, बी) ए + बी। हालांकि, यह किसी भी प्रकार के पैरामीटर की अनुमति नहीं देगा, जब तक कि आप किसी भी तरह से इसे वास्तविक पैरामीटर नामों में बदलने के लिए नहीं प्राप्त कर सकते हैं ... –

+5

@Leif: मुझे नहीं लगता कि मैक्रो आपके लिए उपयुक्त है कह रही है। यदि आप 'स्ट्रक्चर फू' को कुछ अतिरिक्त धारणा चाहते हैं, तो आप आम तौर पर एक फंक्शन 'foo add_foos (foo lhs, foo rhs)' या उस सीमा तक कुछ परिभाषित करेंगे। इस में शामिल प्रीप्रोसेसर को प्राप्त करने की कोई आवश्यकता नहीं है। यदि आप बाद में C++ पर स्विच करते हैं, तो आप 'add_foos' को कॉल करने के लिए' + 'ओवरलोड कर सकते हैं। –

1

-> संरचना पॉइंटर डीरफ्रेंसिंग ऑपरेटर सी स्पेक का हिस्सा है। stdlib.h इस पर असर नहीं करता है।

+0

चूहों, ठीक है, धन्यवाद। मुझे याद है कि मेरे विश्वविद्यालय में एक स्नातक छात्र मुझे बता रहा है। –

+0

एक स्नातक छात्र को किसी भाषा के बारे में कुछ भी जानने के लिए भरोसा न करें जब तक कि वह खुद को कार्यान्वित नहीं करता है। :) – greyfade

5

सी भाषा में अंतर्निहित ऑपरेटरों ओवरलोडेड हैं। तथ्य यह है कि आप पूर्णांक, फ़्लोटिंग-पॉइंट नंबर और पॉइंटर अंकगणित करने के लिए बाइनरी + का उपयोग कर सकते हैं ऑपरेटर ओवरलोडिंग का एक कैनोलिक उदाहरण है।

हालांकि, सी उपयोगकर्ता-स्तरीय ऑपरेटर ओवरलोडिंग के लिए कोई सुविधा प्रदान नहीं करता है। आप सी

1

पर अपने स्वयं के ऑपरेटरों को परिभाषित नहीं कर सकते हैं, निश्चित रूप से, आप सी में ऑपरेटरों को अधिभारित नहीं कर सकते हैं -> ऑपरेटर सी भाषा का हिस्सा है, कोई # आवश्यक नहीं है।

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