मेरे पास एक मैट्रिक्स क्लास है, जो तत्वों तक पहुंचने के लिए [] [] का उपयोग करती है। जब एक (या दोनों) इंडेक्स सीमा से बाहर होते हैं, तो मुझे CIndexException फेंकना पड़ता है। यह एक वर्ग है जो इस प्रारूप में पाठ संग्रहीत करता है "अमान्य अनुक्रमणिका [ए] [बी]", जहां ए और बी संख्याएं हैं।सरणी सीमा से बाहर होने पर अपवाद फेंक रहा है
यह मेरा CIndexException वर्ग
class CIndexException
{
string text;
public:
CIndexException (int a, int b)
{
ostringstream oss;
oss << "Invalid index [";
oss << a;
oss << "][";
oss << b;
oss < "]";
text = oss.str();
}
string get() const
{
return text;
}
};
मैट्रिक्स युगल के एक 2D सरणी के रूप में प्रस्तुत किया जाता है की वर्तमान कार्यान्वयन, यह निर्माता में आरंभ नहीं हो जाता है:
CMatrix(int r, int c)
{
colls = c;
rows = r;
mat = new double * [rows];
for (int i = 0; i < rows; i++)
{
mat[i] = new double [colls];
for (int j = 0; j < colls; j++)
mat[i][j] = 0;
}
}
एक तत्व प्राप्त करने के लिए, मैं [अतिभारित ] ऑपरेटर इस तरह:
double * operator[] (int x) const
{
return mat[x];
}
जब मैं एक [2] [3] टाइप करता हूं, तो यह फ़ंक्शन फिर से पहले हल करता है [], एक सरणी के लिए पॉइंटर लौटाता है और दूसरा [] सामान्य रूप से हल हो जाता है।
मैं आसानी से जांच सकता हूं कि पहली अनुक्रमणिका सीमा से बाहर है या नहीं, लेकिन मुझे दूसरी की जांच करने में परेशानी है। मैंने दूसरी कक्षा, मैट्रिक्सरो बनाने का विचार किया, जो मैट्रिक्स की एक पंक्ति का प्रतिनिधित्व करता है। तब मेरे पास MatrixRows की सरणी होगी। [] [] काम करने के लिए, उन दोनों वर्गों में ओवरलोडेड ऑपरेटर [] होगा। इस तरह से मैं दोनों इंडेक्स की जांच कर पाऊंगा, लेकिन मुझे नहीं पता कि उन्हें एक अपवाद में "शामिल" कैसे किया जाए। इस डिज़ाइन का उपयोग करते समय मैं अपवाद ऑब्जेक्ट में दोनों इंडेक्स की रिपोर्ट कैसे कर सकता हूं?
आप पहले से ही अपने प्रश्न का उत्तर दे चुके हैं, आपको 'MatrixRow' क्लास बनाने की आवश्यकता है, उस पर' [] 'ऑपरेटर अधिभारित करें, और आप कर चुके हैं। समस्या क्या है? – antonijn
मुझे कोई प्रश्न चिह्न नहीं दिख रहा है। – mfontanini
@antonijn - समस्या यह है कि 'MatrixRow' वर्ग को अपवाद में उपयोग किए गए दोनों सूचकांकों की रिपोर्ट करने की आवश्यकता है, लेकिन आम तौर पर यह केवल कॉलम को ही जानता होगा। –