मैं एमएफसी सीख रहा हूं। अगर मैं गलत नहीं हूँ, तो सभी MFC वर्गों के नाम बड़े अक्षर "C" से शुरू होते हैं (जैसे CFrameWnd, CFile, CMenu, आदि)

मैंने पाया कि एमएफसी आधारित परियोजना के लिए विजुअल स्टूडियो विज़ार्ड द्वारा उत्पन्न कोड उपयोगकर्ता द्वारा परिभाषित कक्षाओं के समान नाम देता है। उदाहरण के लिए, यदि मैं अपनी परियोजना को "आकृतियाँ" नाम देता हूँ, तो परियोजना के लिए उत्पन्न वर्गों में CShapesApp, CMainFrame, CChildView, आदि जैसे वर्ग शामिल हैं।

अंत में, आपके प्रोजेक्ट में कई कक्षाएं होंगी, जो CShapesApp, CFrameWnd, CMainFrame, CWinApp, CWnd, आदि जैसी दिख सकती हैं।

प्रश्न: मेरे लिए, वर्गों के नाम (उपयोगकर्ता-परिभाषित और एमएफसी पुस्तकालय) काफी समान और अंतर करने में कठिन लगते हैं यदि यह उपयोगकर्ता-परिभाषित वर्ग या एमएफसी पुस्तकालय वर्ग है।

  • एमएफसी आधारित परियोजनाएं ऐसे नामकरण सम्मेलनों को क्यों चुनती हैं (अर्थात उपयोगकर्ता-परिभाषित वर्गों के सामने "सी" क्यों रखें)?

  • मैं एमएफसी पुस्तकालय कक्षाओं और उपयोगकर्ता परिभाषित कक्षाओं के बीच आसानी से अंतर कैसे कर सकता हूं?

अद्यतन करें: मैं जानता हूं कि मैं नाम बदल सकता हूं और मैं पहले ही यह कोशिश कर चुका हूं। लेकिन सामान्य परंपरा यह है कि उपयोगकर्ता द्वारा परिभाषित कक्षाओं के लिए भी "C" के साथ वर्ग के नाम शुरू किए जाएं और मेरा प्रश्न यह है कि क्यों? और मैं आसानी से कैसे अंतर कर सकता हूं?

3
user2756695 18 मार्च 2020, 18:19
आप जैसे चाहें अपना नाम बदल सकते हैं। यदि आप एप्लिकेशन विज़ार्ड को फिर से चलाते हैं, तो आप जेनरेटेड क्लासेस सूची का उपयोग कर सकते हैं और वहां उनका नाम बदल सकते हैं। docs. microsoft.com/en-us/cpp/mfc/reference/…
 – 
Lou Franco
18 मार्च 2020, 18:25
C वर्ग के नाम के सामने विशुद्ध रूप से एक एमएफसी सम्मेलन है। आप अपने पहचानकर्ताओं को अपनी पसंद के अनुसार नाम दे सकते हैं। C होने का लाभ यह है कि आप तुरंत देखते हैं कि यह एक वर्ग का नाम है। 15 साल या उससे भी पहले यह काफी फायदेमंद था, लेकिन आज के बुद्धिमान संपादकों के साथ यह कम प्रासंगिक है।
 – 
Jabberwocky
18 मार्च 2020, 18:26
आम तौर पर, Microsoft उपसर्गों का उपयोग आपको यह जानने में मदद करने के लिए करता है कि नाम का उपयोग किस लिए किया जाता है -- C is class। यह नाम को अन्य चीजों के बीच अंतर करने में मदद करने के लिए है जो यह हो सकता है (जैसे वैश्विक चर, एक फ़ंक्शन, आदि)। देखें: en.wikipedia.org/wiki/Hungarian_notation
 – 
Lou Franco
18 मार्च 2020, 18:27
आप अपने स्वयं के उपसर्ग का उपयोग करके आसानी से अंतर कर सकते हैं। यदि आप नहीं चाहते हैं तो आपको सी रखने की कोई वजह नहीं है
 – 
Lou Franco
18 मार्च 2020, 18:29
@LouFranco: धन्यवाद, मुझे पता है कि मैं नाम बदल सकता हूं लेकिन सामान्य सम्मेलन "सी" को सामने रखना है। मुझे विरासत कोड से निपटना है जो इस सम्मेलन का उपयोग करके लिखा गया है और मेरे लिए, एमएफसी और उपयोगकर्ता परिभाषित वर्गों के बीच अंतर करना काफी भ्रमित है।
 – 
user2756695
18 मार्च 2020, 18:31

2 जवाब

एमएफसी आधारित परियोजनाएं ऐसे नामकरण सम्मेलनों का चयन क्यों करती हैं (अर्थात "सी" को उपयोगकर्ता-परिभाषित वर्गों के सामने क्यों रखा जाए)?

इसका उत्तर देना असंभव है। एक अनुमान पर, 90 के दशक की शुरुआत में, यह करना सामान्य बात थी। नेमस्पेस को 1995 में C++ में जोड़ा गया था, यानी MFC पर काम शुरू होने के वर्षों बाद, इसलिए MFC ग्लोबल नेमस्पेस में बंद हो गया। कक्षाओं के लिए C उपसर्ग का उपयोग करने से प्रतीकों के विंडोज एपीआई और एसडीके हेडर से टकराने की संभावना कम हो जाती है।

मैं एमएफसी पुस्तकालय कक्षाओं और उपयोगकर्ता परिभाषित कक्षाओं के बीच आसानी से अंतर कैसे कर सकता हूं?

एमएफसी कक्षाएं उपयोगकर्ता द्वारा परिभाषित कक्षाएं हैं। यह तुरंत स्पष्ट नहीं है, आपको एमएफसी द्वारा प्रदान की गई उपयोगकर्ता-परिभाषित कक्षाओं और आपके कोड द्वारा प्रदान की गई उपयोगकर्ता-परिभाषित कक्षाओं के बीच अंतर करने की आवश्यकता क्यों है। यदि आपको यह उपयोगी लगता है, तो कोई शॉर्टकट नहीं है। आपको बस यह याद रखना है कि कौन से एमएफसी से संबंधित हैं।

हालांकि, एमएफसी में कक्षाओं के 2 सेट हैं, जिसके लिए यह जानना उपयोगी है कि वे किस सेट में हैं: 'मूल' कक्षाएं, और विजुअल स्टूडियो 2008 (मेरा मानना ​​​​है) के साथ शुरू की गई कक्षाएं, जो एक व्यापक सेट प्रदान करती हैं कार्यक्षमता का। आप उपसर्ग को देखकर उन सेटों के बीच अंतर कर सकते हैं: 'मूल' कक्षाएं C (जैसे CButton) से शुरू होती हैं, और अपडेट की गई कक्षाओं में एक CMFC उपसर्ग होता है (जैसे CMFCButton).

1
IInspectable 18 मार्च 2020, 18:46
"आपको बस यह याद रखना है कि कौन से एमएफसी से संबंधित हैं"। ठीक है, मैं यही जानना चाहता था क्योंकि मेरे लिए, CMainFrame और CFrameWnd कमोबेश एक जैसे लगते हैं और इसी तरह CWinApp और CMainApp समान लगता है।
 – 
user2756695
18 मार्च 2020, 18:35
@ उपयोग: आपने अभी भी समझाया नहीं है, आपको यह जानने की आवश्यकता क्यों है कि कोई दिया गया प्रकार उपयोगकर्ता-लेखक है या पुस्तकालय-प्रदान किया गया है। मुझे वह भेद कुछ कृत्रिम लगता है।
 – 
IInspectable
18 मार्च 2020, 18:48
आपके संदर्भ के लिए, यह विजुअल स्टूडियो 2019 से एमएफसी वर्ग की सूची है docs.microsoft.com/en-us/cpp/mfc/reference/…
 – 
Fabio C.
19 मार्च 2020, 11:28
इसे हाल ही में उसी लेखक के एक प्रश्न के लिए इस उत्तर में पोस्ट किया गया है (पदानुक्रम चार्ट के लिंक सहित)।
 – 
IInspectable
19 मार्च 2020, 11:54
@IInspectable: मुझे आसानी से अंतर करना सीखना होगा क्योंकि मुझे अक्सर एमएफसी कक्षाओं और उपयोगकर्ता परिभाषित कक्षाओं दोनों के ऑब्जेक्ट इंस्टेंस का निर्माण मिलता है। और, समान नामों के कारण, मुझे यह पता लगाने के लिए अक्सर परिभाषाओं को देखना पड़ता है कि यह उपयोगकर्ता-परिभाषित या एमएफसी आधारित है या नहीं। यदि यह उपयोगकर्ता द्वारा परिभाषित है, तो मुझे इसके बारे में और जानने की जरूरत है।
 – 
user2756695
19 मार्च 2020, 13:46

"सी" उपसर्ग सम्मेलन आपके स्वाद का प्रश्न है। लेकिन याद रखें, सभी एमएफसी-व्युत्पन्न वर्ग वास्तव में एमएफसी वर्ग "हैं" - विरासत के अर्थ में एक व्युत्पन्न वर्ग "पूर्वज" भी है। तो मत भूलिए कि आपके CWnd-व्युत्पन्न CMyWnd में वह सब कुछ है जो एक CWnd के पास भी है। नामकरण के लिए मेरा व्यक्तिगत दृष्टिकोण (जिसे मैंने कई देव टीमों में पेश किया) सभी एमएफसी-व्युत्पन्न वर्गों के लिए "सी" उपसर्ग का उपयोग करना है और गैर-एमएफसी-व्युत्पन्न कक्षाओं पर एक और (या यहां तक ​​​​कि कोई नहीं) का उपयोग करना है।

0
Nick 23 मार्च 2020, 13:59