2016-10-28 6 views
6

सेटर का उपयोग करते हुए मैं सी ++ इस तरह एक पूर्णांक सरणी है कि में एक वर्ग का उपयोग करना चाहतेगेटर, C++

sum i1 i2 

कि मतलब: इंडेक्स 1 में एरे इंडेक्स 1 और इंडेक्स 2 और स्टोर का योग।

कैसे मैं यह कर सकता है, जैसे getters और setters उपयोग करने के साथ:

seti2(geti1()+geti2()) 

या ऐसा ही कुछ, (क्योंकि यह बहुत उपयोगी नहीं है, मैं हर सूचकांक geti1 के लिए गेटर और सेटर लिखने के लिए नहीं करना चाहते हैं() geti2() ... geti50())

क्या आपके पास कोई विचार है?

वैसे, मेरा दूसरा सवाल यह है कि, क्या गेटर के पास कोई पैरामीटर नहीं होना चाहिए और क्या सेटटर में केवल एक पैरामीटर होना चाहिए?

+3

आप भी पढ़ सकते हैं ([getters और setters गरीब डिजाइन हैं?] Http://stackoverflow.com/questions/565095/are-getters-and-setters-poor-design-contradictory-advice-seen) –

+1

'ऐसा करना असुविधाजनक है' - तो ऐसा मत करो। आपको ऐसा क्यों लगता है कि आपको ऐसा करने की ज़रूरत है? यह निजी क्यों है? या तो ** (ए) ** इसे encapsulated किया जाना चाहिए, अगर आपके पास इसे प्राप्त करने/स्थापित करने से पहले इनपुट की जांच/कुशलतापूर्वक कुछ कारण है - या आप उच्च स्तर पर काम करना चाहते हैं, कक्षा के काम के साथ और आप बस कॉलिंग विधियों के साथ जैसे 'sortArray() ',' processArray() ', आदि - _xor_ ** (बी) ** यह नहीं होना चाहिए, इसलिए get/setter व्यर्थ हैं। यदि आप चाहते हैं कि असंबद्ध सार्वजनिक पहुंच है, तो एक्सेसर्स व्यर्थ ब्लाउट हैं - बस एक सादे सरणी का उपयोग करें, और टोकन इशारा के रूप में encapsulation के नाटक का विरोध करना बंद करो। –

उत्तर

6

वास्तविक विचारों का उपयोग करने का एक विचार हो सकता है। तो आपके पास एक get फ़ंक्शन है जो एक इंडेक्स को तर्क के रूप में लेता है, और एक set फ़ंक्शन जो इंडेक्स और मान को तर्क के रूप में लेता है।

एक और समाधान operator[] फ़ंक्शन को अधिभारित करना है, ताकि अच्छी सरणी जैसी इंडेक्सिंग प्रदान की जा सके।

+0

धन्यवाद मुझे यह पता है लेकिन मेरी समस्या यह है कि मैं कैसे समझ सकता हूं कि किस सूचकांक को कॉल किया जाना चाहिए?मेरा मतलब है कि फ़ाइल है: i1 i2 जोड़ें, मुझे सेट करना चाहिए (प्राप्त करें (i1) + प्राप्त करें (i2), i1) लेकिन अगर यह सामान्य है तो यह सामान्य समाधान है, अगर फ़ाइल जोड़ती है I48 i3 मैं यह कैसे कर सकता हूं: सेट करें (प्राप्त करें (48) + प्राप्त करें (i3), i48)? –

+1

@ FurkanYıldız यह वास्तव में एक अलग सवाल है। यदि वह प्रारूप आपको समर्थन देने की आवश्यकता है तो यह सरल स्ट्रिंग फ़ंक्शंस का उपयोग करके अपेक्षाकृत आसान है। अभी भी एक और सवाल है। कृपया पहले इसे पहले आज़माएं (इनपुट स्ट्रीम और इनपुट ऑपरेटर '>>' मूल रूप से आपको यहां की आवश्यकता है), और यदि आप इसे प्रबंधित नहीं करते हैं तो [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] बनाने का प्रयास करें (http://stackoverflow.com/help/mcve) और एक नया प्रश्न पोस्ट करें। –

0

सेटर/गेटर का उपयोग कर संपुटित के लिए, आप उदाहरण के लिए, का उपयोग कर सकते हैं:

class A{ 
    private: 
    int arr[50]; 
    public: 
    int get(int index); 
    void set(int index, int value); 
} 
... 
int A::get(int index) { 
    return arr[index]; 
} 
void A::set(int index, int value) { 
    arr[index] = value; 
} 
..  
instanceOfA->set(1, instanceOfA->get(1) + instanceOfA->get(2)); 

हालांकि, पार्स करने कमांड पाठ फ़ाइल से पढ़ने में अधिक काम की आवश्यकता होगी।

0

आप अभी भी अपने क्षेत्रों के नामों की लाभ लेना चाहते हैं, तो आप एक भी गेटर/सेटर है और अपने कोड में थोड़ा और अधिक सार्थक बनाने के लिए एक गणन इस्तेमाल कर सकते हैं: अगर आप यदि '

class A{ 
public: 
    enum Index 
    { 
     INDEX_SUM, 
     INDEX_I1, 
     INDEX_I2, 
     INDEX_I3, 
     ... 
     INDEX_I50, 
    }; 

    int geti(const Index index); 

    void seti(const Index index, const int value); 

private: 
    int arr[50]; 

}; 

int A::geti(const Index index) 
{ 
    return arr[static_cast<int>(index)]; 
} 

void A::seti(const Index index, const int value) 
{ 
    // Maybe don't allow "sum" to be set manually? 
    if (INDEX_SUM == index) 
     throw std::runtime_error("Cannot set sum manually"); 

    arr[static_cast<int>(index)] = value; 

    // Maybe update sum? 
    arr[INDEX_SUM] = std::accumulate(arr, arr + 50, 0); 
} 

टी मैन्युअल रूप से enum बनाना चाहते हैं, और बूस्ट पुस्तकालयों तक पहुंच है, आप BOOST_PP_ENUM_PARAMS का उपयोग कर सकते हैं। वैकल्पिक रूप से आप enum उत्पन्न करने के लिए एक सरल खोल स्क्रिप्ट का उपयोग कर सकते हैं। उस पर अधिक जानकारी के लिए this stackoverflow question देखें।

0

मेरा सुझाव मई:

class A{ 
private: 
     const int ARR_SIZE = 50; 
     int arr[ARR_SIZE]; 
public: 
    int get(int _iIndex) 
    { 
     return arr[_iIndex]; 
    } 

    void set(int _iIndex, int _iValue) 
    { 
     if (_iIndex < ARR_SIZE) 
      arr[_iIndex] = _iValue; 
    } 
} 

तो आप कर सकते हैं;

get(i); 

set(i, get(x) + get(y)); 
संबंधित मुद्दे