बिल्कुल संभव हो तो, यह प्रारंभकर्ता सूची के माध्यम से डेटा के सदस्यों सेट करने के लिए बेहतर है, जिस स्थिति में छाया सदस्य नामों के तर्कों के साथ कोई समस्या नहीं है। एक और विकल्प कन्स्ट्रक्टर के शरीर में this->foo = foo;
का उपयोग करना है। सेटर्स के लिए एक समान समस्या मौजूद है, लेकिन अब आप प्रारंभकर्ता सूची समाधान का उपयोग नहीं कर सकते हैं। आप this->foo = foo;
से फंस गए हैं - या केवल तर्क और सदस्यों के लिए अलग-अलग नामों का उपयोग करें।
कुछ लोग वास्तव में उन तर्कों से नफरत करते हैं जो डेटा सदस्यों को छाया करते हैं; एकाधिक कोडिंग मानक स्पष्ट रूप से ऐसा नहीं करते हैं। दूसरों को लगता है कि कम से कम रचनाकारों और सेटर्स के लिए, बिल्ली की मेयो है। मुझे याद है कि एक या दो कोडिंग मानकों को पढ़ना याद है (लेकिन मुझे याद नहीं है) जिसने इस तरह के छायांकन को "चाहिए" (लेकिन "नहीं") अभ्यास के रूप में नामित किया है।
एक अंतिम विकल्प फ़ंक्शन घोषणा में छायांकन का उपयोग करना है ताकि पाठकों को कार्य के बारे में संकेत मिले, लेकिन कार्यान्वयन में अलग-अलग नामों का उपयोग करें।
अद्यतन: "छायांकन" क्या है?
#include <iostream>
void printi (int i) { std::cout << "i=" << i << "\n"; }
int i = 21;
int main() {
printi (i);
int i = 42;
printi (i);
for (int i = 0; i < 3; ++i) {
printi (i);
int i = 10;
printi (i);
}
printi (i);
}
i
, int i=10
के अंतरतम घोषणा, चर i
for
बयान, जो बारी में चर i
समारोह गुंजाइश, जो बारी में वैश्विक चर i
छाया पर घोषित कर दिया छाया में घोषित छाया।
हाथ में समस्या में, तर्क x
, y
, width
, और height
वर्ग A
छाया लिए गैर-सामान्य निर्माता करने के लिए उन तर्कों के रूप में एक ही नाम के साथ सदस्य डेटा।
आपके width=width;
ने कुछ भी नहीं किया क्योंकि तर्क width
डेटा सदस्य width
तर्क (छुपाएं)। जब आपके पास अलग-अलग क्षेत्रों में घोषित किए गए एक ही नाम के साथ दो या दो से अधिक चर होते हैं, तो विजेता हमेशा सबसे निचले दायरे के साथ नाम होता है। आम तौर पर, यह हमेशा जीतने वाले सबसे निचले क्षेत्र के साथ नाम होता है।
स्रोत
2012-10-10 15:59:54
ईह, तर्क नामों के लिए 'ए' जोड़ना? –
'ए :: ए (इंट xa, int ya, int widtha, int heighta)' – corazza
यदि आप सुरुचिपूर्ण होना चाहते हैं, * प्री * एक 'अनिवार्य लेख' बनाते हैं, एक अंग्रेजी अनिश्चित लेख बनाते हैं: 'anX, aY, aWidth, AHight' आदि जाहिर है, एक ही पहचानकर्ता को एक ही दायरे में दो अलग-अलग चर के संदर्भ में उपयोग नहीं किया जा सकता है। मेरा जवाब देखें –