class Base1
{
private:
int testInput;
public:
Base1();
virtual int GetRow(void) = 0;
};
Base1::Base1()
{
testInput = 0;
}
class table : public Base1
{
private:
int row;
public:
table();
virtual int GetRow(void);
};
table::table()
{
//Contructor
row = 5;
}
int table::GetRow()
{
return row;
}
int main()
{
Base1* pBase = new table[3];
pBase[0].GetRow();
pBase[1].GetRow(); //when i get to this line, the compiler keep saying access
// violation.
pBase[2].GetRow();
return 0;
}
मैं 3 टेबल क्लास की एक सरणी बनाने की कोशिश कर रहा हूं। आवश्यकता है कि मुझे ऐसा करने के लिए बेस ऑब्जेक्ट का उपयोग करना होगा।सी ++ में बहुरूपता के साथ सरणी कैसे बनाएं?
Base1 * pBase = new table[3];
मुझे ठीक लग रहा है। लेकिन जब मैंने प्रत्येक टेबल तक पहुंचने का प्रयास किया, तो कंपाइलर ने कहा कि यह उल्लंघन का उल्लंघन है। मुझे नहीं पता कि इस कोड के साथ क्या गलत है। हालांकि मैं विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं।
और, shhh .. लेकिन सही प्रकार पर कास्टिंग, और फिर जाली प्रकार पर विधि को कॉल करने से क्रैश – johnathon
का मतलब होगा आपका मतलब है ((तालिका) पीबीज़) [1] .GetRow() '? यह काम करेगा, लेकिन यह एक * भयानक * चीज है और लगभग निश्चित रूप से वापस आ जाएगी और आपको गधे में काट देगा। –
हाँ मेरा मतलब बिल्कुल यही है। हां यह काफी 'भयानक' है, लेकिन यह सही पते पर पॉलीमोर्फिक वस्तुओं तक पहुंचने में कंपाइलर को संयोजित करने का एक वैध तरीका है। – johnathon