यह 100% सैद्धांतिक प्रश्न है, और शायद राय आधारित है।एक पेशेवर साक्षात्कार पर अप्रत्याशित उत्तर
एक पेशेवर साक्षात्कार में मुझे भाषण में लाइन के अनुसार लाइन का विश्लेषण करने के लिए दो class
es के बहुत भयानक लिखित और अनुचित रूप से स्वरूपित कोड के साथ एक मुद्रित पृष्ठ मिला। आइए इन डेटा संरचनाओं को A
और B
पर कॉल करें। अपेक्षित व्यवहार के बारे में कोई समस्या कथन या कोई जानकारी नहीं थी।
हालांकि उनके एक प्रश्न ने वास्तव में मुझे बंद कर दिया।
एल्गोरिदम के संदिग्ध व्यवहार और कई संभावित और वास्तविक त्रुटियों की पहचान करने के बाद, उन्होंने मुझे एक और त्रुटि की पहचान करने के लिए कहा। मैंने कई अन्य स्पष्ट समस्याओं की पहचान की, लेकिन मुझे नहीं पता था कि वे मुझसे क्या चाहते हैं। खैर, जब उन्होंने मुझे जवाब बताया तो यह मेरा दिमाग उड़ा दिया।
template <typename T>
class A
{
public:
// elements are dynamically allocated on the heap
const T& getValue(unsigned i) const // I'm not even sure it was const
{
// return element at position 'i'
}
virtual void setValue(unsigned i, const T &value)
{
// sets the element at position 'i'
}
};
template <typename T>
class B: public A<T>
{
public:
virtual void setValue(unsigned i, const T &value)
{
// set the element at position 'i' using A<T>::setValue()
// then sort all elements in descending order
}
};
ठीक है, समाधान एक संकलन, क्रम, या तार्किक त्रुटि नहीं है: A
और B
का सरलीकृत संस्करण निम्नलिखित (मैं केवल तरीकों जो उनके विचार का हिस्सा हैं छोड़कर चला गया)। इनके संभावित जोखिम भी नहीं।त्रुटि निम्न है:B::setValue
एक तत्व रखने के बाद डेटा को टाइप करता है, तो आप यह जांच नहीं सकते कि किसी दिए गए स्थान पर आपके द्वारा उपयोग किए जाने वाले डेटा वही है जो आपने उस स्थिति में संग्रहीत किया है। हालांकि A
के साथ आप यह कर सकते हैं। A
और B
के बीच यह बेजोड़ व्यवहार एक त्रुटि के रूप में माना जाता है (और उन्होंने कहा कि यह एक त्रुटि नहीं है, लेकिन फिर भी यह एक त्रुटि है)।
मुझे लगता है कि यह पूरी तरह से एक डिज़ाइन विकल्प है (चूंकि B
का पूरा बिंदु सॉर्ट किए गए डेटा को बनाए रखना है) और मैं यह नहीं कहूंगा कि यह एक त्रुटि है, विशेष रूप से किसी समस्या कथन या अपेक्षित व्यवहार पर कोई जानकारी के बिना। यह पॉलिमॉर्फिज्म के विचार या अवधारणा का भी उल्लंघन नहीं करता है।
क्या आप इसे एक त्रुटि के रूप में पहचानेंगे?
कोई भी परीक्षण करना चाहेगा कि कोई तत्व सॉर्ट करने के बाद भी एक ही स्थिति में है या नहीं? – user463035818
'ए :: सेटवैल्यू (1, 5) 'टाइप' शून्य 'है, जिसके लिए कोई' == 'अभिव्यक्ति नहीं है। –
मुझे लगता है कि उनका मतलब है कि इसका वर्ग के बाहर परीक्षण नहीं किया जा सकता है (क्योंकि उन्होंने ऐसा करने के लिए कोई सहायक विधि प्रदान नहीं की है)। – plasmacel