क्यूटी फ्रेमवर्क के माध्यम से C ++ सीखना वास्तव में C ++ सीखना है [बंद]


32

मेरे पास जो समस्या है, वह यह है कि मैंने जो C ++ पुस्तकें पढ़ी हैं उनमें से अधिकांश वाक्य रचना और भाषा की मूल बातें, जैसे forऔर छोरों while, सूचियों, सूचकों, आदि पर लगभग हमेशा खर्च होती हैं ।

लेकिन वे कभी भी कुछ भी नहीं बनाते हैं जो सीखने के लिए उपयोग करने के लिए सरल है, फिर भी व्यावहारिक रूप से आपको भाषा के दर्शन और शक्ति को समझने के लिए पर्याप्त है।

फिर मैं क्यूटी पर ठोकर खाई जो एक अद्भुत पुस्तकालय है!

लेकिन उनके पास मौजूद डेमो के माध्यम से काम करना, ऐसा लगता है कि मैं अब उलट दुविधा में हूं। मुझे लगता है कि पिता द्वारा सब्सिडी वाली स्पोर्ट्स कार में रईस का बेटा राउंड चला रहा है। जैसे मैं शानदार सॉफ्टवेयर बना सकता था, लेकिन हुड के नीचे क्या चल रहा है, इसका कोई सुराग नहीं है।

मेरी दुविधा के एक उदाहरण के रूप में एक साधारण वेब ब्राउज़र बनाने का कार्य करें। शुद्ध C ++ में, मुझे यह भी पता नहीं होगा कि कहां से शुरू करना है, फिर भी Qt लाइब्रेरी के साथ यह कोड पर कुछ लाइनों के भीतर किया जा सकता है।

मुझे इस बारे में कोई शिकायत नहीं है। मैं बस सोच रहा हूं कि भाषा की बुनियादी संरचना और Qt फ्रेमवर्क प्रदान करने वाले उच्च स्तरीय इंटरफ़ेस के बीच ज्ञान शून्य कैसे भरें?


मैं Qt में प्रोग्रामिंग से परिचित नहीं हूँ। क्या यह वास्तव में किसी भी नए वाक्यविन्यास को प्रस्तुत करता है या भाषा को बदलता है, या यह सिर्फ कुछ बहुत ही परिष्कृत पुस्तकालय हैं?
FrustratedWithFormsDesigner 20

@FrustratedWithFormsDesigner यदि आप रुचि रखते हैं तो यह क्यूटी GUI फ्रेमवर्क qt.nokia.com क्यूटी नहीं है
कार्लसन

Qt मानक कक्षाओं और कंटेनरों (जैसे QString, QList, और इसी तरह) और कई अन्य सुविधाओं के लिए एक विकल्प प्रदान करता है। उनमें से कुछ मुझे मानक लोगों की तुलना में अधिक सहज लगते हैं। मुझे लगता है कि यह एक अच्छा प्रोग्रामिंग वातावरण है, लेकिन मैं कोर C ++ भाषा को अलग से सीखने की सलाह दूंगा।
जियोर्जियो

3
यदि आप सीखना चाहते हैं कि क्यूटी कैसे लागू किया जाता है, तो बस डाउनलोड करें और इसके स्रोत कोड को देखें।
user16764

1
@ कार्लसन क्यूटी भाषा में कुछ चीजें जोड़ते हैं, इसलिए मॉक उर्फ ​​मेटाबॉजेक्ट कंपाइलर की आवश्यकता है। यह कुछ प्रतिबिंब जोड़ता है और Qt के संकेतों / स्लॉट प्रणाली का आधार बनाता है।
तमसे सजेलेई

जवाबों:


11

क्या आप जानना चाहते हैं कि एक्सीलेटर पर कदम रखने से कार कैसे तेज होती है, या क्या आप केवल इस बात का ध्यान रखते हैं कि एक्सीलेटर पर कदम रखने से कार तेजी से आगे बढ़ती है?

आप ब्लैक बॉक्स प्रोग्रामिंग के लिए लाभ देख रहे हैं, जो एक प्रणाली को डिज़ाइन करने का एक शानदार तरीका है जब सभी बॉक्स काम करते हैं। हालांकि किसी को ब्लैक बॉक्स बनाना है और अगर आप उस लड़के / लड़की बनना चाहते हैं तो आपको बॉक्स का उपयोग करने वाले व्यक्ति की तुलना में भाषा के बारे में अधिक जानकारी होनी चाहिए।

ऐसी नौकरियां हैं जो प्रत्येक शैली में अच्छी नौकरियां हैं, इसलिए यह आपके ऊपर है कि आप क्या प्रोग्राम करना चाहते हैं। IMO आप अपने आप को एक असंतुष्ट कर रहे होंगे हालांकि अगर आपने पीछे हटने का प्रयास नहीं किया तो कुछ एब्सट्रैक्ट क्यूटी आपको अंततः दे रहे हैं।


2
"IMO आप अपने आप को एक असंतुष्ट कर रहे होंगे, हालांकि अगर आपने कुछ अमूर्त क्यूटी को वापस छीलने के प्रयास को आगे नहीं बढ़ाया है, तो आप अंततः दे रहे हैं।" आपका अधिकार है और मुझे लग रहा है
2286 में उपयोगकर्ता

18

सबसे ज्यादा नुकसान आप खुद कर रहे होंगे, अगर आप इसे इस तरह से रखना चाहते हैं, तो यह है कि आप मानक C ++ डेटा संरचनाओं, पुनरावृत्तियों, एल्गोरिदम और तारों का उपयोग करना नहीं सीखेंगे। Qt के पास उन सभी उद्देश्यों के लिए स्वयं के पुस्तकालय हैं, और आप सभी मानक C ++ संस्थाओं के बजाय उनका उपयोग करने के लिए मजबूर हैं क्योंकि Qt API केवल अपने स्वयं के डेटा संरचनाओं को स्वीकार करते हैं।

कोई यह तर्क दे सकता है कि दूसरे में महारत हासिल करने के बाद एक एल्गोरिदम लाइब्रेरी का उपयोग करना सीखना एक तुच्छ कार्य है। एक साक्षात्कार में जाने से पहले जहां साक्षात्कारकर्ता आपसे C ++ में मास्टर करने की उम्मीद करते हैं, सुनिश्चित करें कि आप पहले से उस तुच्छता से निपटते हैं।


3
सहमत- Qt पूरी तरह से मानक C ++ के लिए एक पूरी तरह से अलग टूलसेट का उपयोग करता है।
डेडजैम

हमारी कंपनी में एक लंबी बहस थी कि क्या किसी को मानक कंटेनरों और पुनरावृत्तियों या क्यूटी वाले का उपयोग करना चाहिए और हम अभी तक एक समाधान के साथ नहीं आए हैं: हम दोनों का उपयोग करते हुए समाप्त हो गए, भले ही हम दो शैलियों को एक में न मिलाएं मॉड्यूल दिया गया। मुझे लग रहा है कि क्यूटी से मानक तक बढ़ना वैचारिक रूप से बहुत आसान है, भले ही इसमें थोड़ा समय लगेगा।
जियोर्जियो

9
मैं अपने इंजीनियरिंग मॉडल के अंदर मानक कंटेनर और एल्गोरिदम का उपयोग करता हूं - अर्थात मेरा व्यावसायिक तर्क। मैं अपने GUI कोड के अंदर Qt कंटेनरों का उपयोग करता हूं। इस तरह मेरे इंजीनियरिंग मॉडल Qt में बदलाव और इसके विपरीत से सुरक्षित हैं। क्यूटी में मानक कंटेनरों और उनके कंटेनरों को जोड़ने के तरीके हैं।
इमरश

2
मैं वैसे भी कंटेनर के बारे में ज्यादा परवाह नहीं है। वे एसटीएल का सबसे उपयोगी हिस्सा नहीं हैं; एल्गोरिदम कहीं अधिक महत्वपूर्ण हैं। एसटीएल के डिजाइन के कारण, इसके एल्गोरिदम आसानी से अन्य कंटेनरों के साथ काम कर सकते हैं, और क्यूटी कंटेनरों को एसटीएल एल्गोरिदम के साथ काम करने के लिए डिज़ाइन किया गया है। जीत, वास्तव में।
एमएसलटर्स

12

यह ध्यान में रखते हुए कि Qt का अपना मेटा-कंपाइलर है जिसे आपको अपनी स्रोत फ़ाइलों को प्रोसेस करना है, Qt कोड को "सिर्फ C ++" माना जाना कठिन है।

लेकिन इससे भी महत्वपूर्ण बात यह है कि क्यू ++ की शैली जो क्यूटी उपयोग करती है और प्रोत्साहित करती है, वह कुछ ऐसा है, जिसे हम में से बाकी लोगों ने आखिरी बार 1995 के आसपास देखा था।

वास्तव में, यह C ++ को जावा की तरह बनाने का प्रयास है। यह याद आती है, या हतोत्साहित करती है, सभी आश्चर्यजनक चीजें जो वास्तव में आज का उपयोग करने लायक सी ++ बनाती हैं । इसके बजाय, आप एक सबसेट में बंद हो जाते हैं, जो सभी को एक हीन जावा की तरह लगता है।

इसलिए यदि लक्ष्य C ++ सीखना है, तो मैं कहूंगा कि Qt से दूर रहें। शायद इसके बजाय बूस्ट पर एक नज़र डालें, यदि आप एक शुरुआती बिंदु के रूप में एक स्थापित पुस्तकालय का उपयोग करना चाहते हैं। बूस्ट उन प्रथाओं का प्रतीक हैं जिन्हें आज अच्छा माना जाता है

लेकिन ईमानदारी से, यदि आप सी ++ भाषा सीखना चाहते हैं , तो एक अच्छी पाठ्यपुस्तक चुनें, और भाषा पर ध्यान केंद्रित करें

वेब ब्राउज़र लिखना, चाहे आप इसे कैसे भी करें, यह आपको वेब ब्राउज़र के बारे में सबसे अच्छा सिखाएगा। यह आपको उस भाषा के बारे में बहुत कुछ नहीं सिखाएगा जिसका आप उपयोग कर रहे हैं।

C ++ एक भाषा के रूप में एक WebBrowser वर्ग में निर्मित नहीं है। यदि आप C ++ मानक पढ़ते हैं, तो यह ब्राउज़रों के बारे में कुछ नहीं कहता है। यह GUI अनुप्रयोगों का भी उल्लेख नहीं करता है।

ऐसा इसलिए है क्योंकि उन चीजों को शीर्ष पर बनाया गया है, क्यूटी जैसे पुस्तकालयों द्वारा प्रदान किया गया है। C ++, किसी भी प्रोग्रामिंग भाषा की तरह, तर्क के बारे में है, उस तर्क को कैसे व्यक्त किया जाए। और हाँ, इसका मतलब है कि सरणियों और बिंदुओं और छोरों और उन सभी चीजों के साथ काम करना।

क्या आप पर्याप्त समय को देखते हुए, केवल उन अंतर्निहित टूल का उपयोग करके वेब ब्राउज़र लिखने में सक्षम होंगे ? क्या आप जानते हैं कि प्रोग्राम लॉजिक को कैसे व्यक्त किया जाए? यदि नहीं, तो आपको लूप और पॉइंटर्स पर अधिक समय बिताने की जरूरत है, और कम कॉलिंग new QWebKit()और बस तैयार पुस्तकालयों को बंद करने के लिए।

"भाषा का दर्शन और शक्ति" सरणियों और सूचियों और छोरों में है, वेब ब्राउज़रों में नहीं।


4
मैंने कभी नहीं कहा कि वे बेहतर थे क्योंकि वे नए हैं । वे नए हैं और वे बेहतर हैं। मुद्दा यह है कि एक भाषा के रूप में C ++ इस जावा-जैसे दृष्टिकोण के लिए बहुत अच्छी तरह से अनुकूल नहीं है। सी ++ में, विरासत और रनटाइम बहुरूपता एक दर्द है, क्योंकि यह व्यावहारिक रूप से आपको जगह-जगह वस्तुओं को ढेर करने के लिए आवश्यक है, जो कि पहली जगह में मेमोरी लीक के लिए भाषा को अपनी प्रतिष्ठा देती है, क्योंकि स्लाइसिंग त्रुटियों के लिए प्रवण होता है, क्योंकि यह वस्तुओं को कॉपी करना कठिन बनाता है। यह भी अक्षम है, कम एक्स्टेंसिबल है और अधिक थकाऊ बॉयलरप्लेट कोड की आवश्यकता है।
:

2
हेक, क्यूटी को प्रोग्रामिंग की अपनी शैली बनाने के लिए अपनी मेटा-कंपाइलर की आवश्यकता है । क्या आपको कुछ नहीं बताया गया है?
:

4
मैं अपने आप में क्यूटी का बचाव नहीं कर रहा था (मुझे स्वयं इसमें बहुत सी सीमाएँ दिखाई देती हैं)। आपका कथन "क्यू ++ की शैली जो क्यूटी उपयोग करती है और प्रोत्साहित करती है, वह कुछ ऐसा है, जो हम में से बाकी लोगों ने आखिरी बार 1995 में देखा था।" इस फॉर्मूलेशन के साथ यह स्पष्ट नहीं है कि इस शैली के साथ क्या बुरा है (अन्य कि यह 15 साल पुराना है) और वर्तमान क्या है, बेहतर विकल्प हैं। हो सकता है कि यदि आप अधिक विशिष्ट हैं, तो आपका मतलब स्पष्ट हो जाएगा।
जियोर्जियो

3
@JimInTexas: यह C ++ से भी पूर्ववर्ती है। तुम्हारी बात? 90 के दशक के शुरुआती दौर में, C ++ बहुत अलग जानवर था। यह अंततः आज की तुलना में जावा बन गया था, के बहुत करीब था।
जलफ

3
@JimInTexas: हाँ, यह गलत है, लेकिन मुझे उम्मीद है कि यह स्पष्ट रूप से स्पष्ट होना चाहिए कि मेरा क्या मतलब है। यह C ++ में जावा के डिज़ाइन लक्ष्यों को प्राप्त करने का एक प्रयास है। यह उसी त्रुटिपूर्ण OOP मॉडल को लागू करने का प्रयास है जो जावा लागू करता है।
जलफ

9

क्यूटी फ्रेमवर्क के माध्यम से C ++ सीखना वास्तव में C ++ सीखना है

शायद।

मुझे वह कोड देखना होगा जो आप अपने ईवेंट हैंडलर में डाल रहे हैं।

हालांकि वास्तव में, आपको "पता" कितना नहीं है। हम सभी विंडोिंग फ्रेमवर्क का उपयोग करते हैं और हम सभी अभी भी सीख रहे हैं। बस नई चीजों को कोडिंग / पढ़ना जारी रखें और आप C ++ सीखना जारी रखेंगे। एक नया विन्डिंग फ्रेमवर्क सीखना आपके कौशल के लिए एक बढ़िया अतिरिक्त है, भले ही इसका मतलब यह न हो कि आप एक तंत्रिका नेटवर्क या C ++ में क्विकसर्ट लागू कर सकते हैं।


5

चिंता मत करो; सबसे पहले आपका अधिकांश कोड केवल रूपरेखा का उपयोग करेगा , लेकिन थोड़ी देर बाद आपको इसे विस्तारित करना होगा, भले ही बस थोड़ा सा। फिर आपको C ++ का अधिक से अधिक उपयोग करना होगा।

यह भी याद रखें कि आपके पास Qt का पूरा स्रोत उपलब्ध है, IDE ख़ुशी से आपको किसी भी फंक्शन / विधि / क्लास की परिभाषा में ले जाएगा। आप जितने गहरे जाएंगे, उतना ही C ++ आप देखेंगे।

दूसरों ने Qt C ++ और मानक C ++ के बीच अंतर के बारे में उल्लेख किया है। ये दो शिविरों में आते हैं:

  • अलग-अलग पुस्तकालय: क्यूटी में सभी सामान्य कंटेनर शामिल हैं: सरणियाँ, सूचियाँ, सेट, हैशमैप, आदि। वे बहुत अच्छी तरह से एक साथ फिट होते हैं और अच्छे कार्यान्वयन हैं, लेकिन वे एसटीडी विविधता नहीं हैं। फिर भी, हाल के संस्करणों में (4.1 और बाद में, मुझे लगता है) उनके पास पुरानी किस्म (और जावा-जैसे एपीआई) के अलावा 'एसटीडी-जैसे' एपीआई हैं। अंत में, डिजाइन विकल्प (एक सरणी का उपयोग करने के लिए, जब एक हैशमैप का उपयोग करने के लिए) समान हैं, इसलिए गैर-क्यूटी परियोजनाओं के लिए एसटीडी में बदलना इतना कठिन नहीं है।

  • mocसिंटैक्स परिवर्धन: ज्यादातर सिग्नल-हैंडलिंग के लिए, लेकिन अच्छे लूप निर्माण के एक जोड़े के लिए भी। बहुत से लोगों को लगता है कि इस उपकरण का मतलब है कि यह C ++ नहीं है; लेकिन IMHO, वे बस थोड़ा होशियार मैक्रोज़ की तरह लग रहा है। एक अच्छा शिथिल-युग्मित सिग्नल हैंडलिंग एक अच्छी रूपरेखा का एक बड़ा लाभ है, और यह एक स्थिर टाइपिंग भाषा पर करने के लिए कुख्यात है। आधुनिक C ++ में, यह टेम्प्लेट की भारी खुराक के साथ उल्लेखनीय है; लेकिन वह मानक से बहुत दूर था जब Qt पहली बार मिला था moc। अंत में, यदि आप बाद में गैर-क्यूटी परियोजनाओं को करना चाहते हैं, तो पहले जांचें कि क्या आप किसी भी ढांचे का उपयोग कर रहे हैं और यदि इसके पास सिग्नल हैं। यदि हाँ, तो आप क्यूटी के साथ क्या करने के लिए उपयोग किए जाते हैं, उनमें से अधिकांश लागू होंगे, इसलिए पहले क्यूटी सीखने में कोई 'नुकसान' नहीं है।


लूप सुधार किसके द्वारा दिया जाता है moc?
बेसिल स्टारीनेवविच

@ बासीले स्टारीनेवविच: हो सकता है कि वह फॉरच लूप (जिसका मैं अत्यधिक उपयोग करता हूं) को संदर्भित करता हूं। यह एक सिंटैक्स जोड़ है लेकिन, ASAIK, इसका मॉक से कोई लेना-देना नहीं है। इसलिए आप सही हैं कि हो सकता है कि इसका जवाब अलग तरीके से तैयार किया जाए।
जियोर्जियो

foreachबस एक मैक्रो है .... (वास्तव Q_FOREACHमें परिभाषित करने के लिए एक "उपनाम" है <Qt/qglobal.h>)। मुझे नहीं लगता कि mocयह इसे संसाधित कर रहा है। और C ++ 11 का for (auto it : container)निर्माण है!
बेसिल स्टारीनेवविच

@ बासीले स्टारीनेवविच: संभवतः क्यूटी को एक गहन पुन: इंजीनियरिंग की आवश्यकता होगी यदि उसे सी ++ 11 पर जाना होगा: क्यूटी को सी ++ के लिए डिज़ाइन किया गया था (और इसकी कुछ सीमाओं को पार करने की कोशिश भी की गई थी) इसलिए इसके कुछ समाधानों को सी के साथ की आवश्यकता नहीं है। ++ 11।
जियोर्जियो

1
मैं क्यूटी और बूस्ट दोनों का उपयोग करता हूं। दो पुस्तकालयों के बीच बहुत अधिक ओवरलैप है, लेकिन क्यूटी सीखना बहुत आसान है।
जिम इन टेक्सास

4

क्यूटी का व्यापक रूप से व्यावसायिक दुनिया में उपयोग किया जाता है क्योंकि यह एक अच्छा जीयूआई पुस्तकालय सहित एक पूर्ण क्रॉस प्लेटफॉर्म टूलसेट और विकास वातावरण प्रदान करता है।

यह उत्कृष्ट 'लिंग्विस्ट' टूल सहित अंतर्राष्ट्रीयकरण का भी पूर्ण समर्थन करता है।

यदि आप एक अकादमिक कैरियर की योजना बनाते हैं तो मैं Qt से परेशान नहीं होता। यदि, दूसरी ओर, आप C ++ को पसंद करते हैं और एक विपणन कौशल सीखना चाहते हैं तो Qt सीखने लायक है।

और हाँ, Qt C ++ है, और यदि आप बेहतर महसूस करते हैं तो आप अपने दिल की सामग्री को मानक और पुस्तकालयों में मिला सकते हैं।


3

क्यूटी के माध्यम से सी ++ सीखना एक बुरा विचार है। सबसे पहले आपको किसी भी ढांचे से स्वतंत्र भाषा अवधारणाओं को सीखना होगा और यही c ++ पुस्तकें आपको सिखाएंगी और वे सही हैं। मूल रूप से, 'के लिए और लूप्स, जबकि, सरणियाँ, सूचियाँ, पॉइंटर्स' प्रोग्रामिंग भाषाएं हैं जो सभी के बारे में हैं। अतिरिक्त कार्यशीलता चौखटे द्वारा प्रदान की जाती हैं। एक बार जब आप एक प्रोग्रामिंग भाषा सीख लेते हैं, तो आप Qt या MFC जैसी किसी भी रूपरेखा को सीख सकते हैं, जिसे भाषा का उपयोग करके बनाया गया है, ताकि अनुप्रयोगों को जल्दी से विकसित किया जा सके। क्यूटी के बारे में, एक बार जब आप सी ++ सीखते हैं, तो यह एक उत्कृष्ट ढांचा है जो आपको किसी भी जावा या। नेट डेवलपर्स के रूप में उत्पादक बनाता है। शीघ्र ही आप Qt का उपयोग करके ios और Android ऐप्स विकसित कर पाएंगे।


2

खैर, मुझे लगता है कि C ++ सीखने का सबसे अच्छा तरीका केवल अपने स्वयं के सिंटैक्स (Standard C ++) का उपयोग करना है, इसलिए आप LANGUAGE सामान का उपयोग करने में सक्षम होंगे, और Qt (या कोई अन्य फ्रेमवर्क, लाइब्रेरी ... आदि) नहीं।

क्यूं कर? क्योंकि एक शुरुआत के रूप में, जब आप अन्य गैर-सी ++ कोड (इस मामले में क्यूटी) के साथ मिश्रित किसी भी सी ++ कोड को देखते हैं, तो आप यह नहीं देख पाएंगे कि सी ++ की चीजें क्या हैं और क्या नहीं है, बल्कि यह अधिक जटिल प्रक्रिया होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.