我有2類:使用指針基類如數組參數
class Base
{
public:
virtual int Foo(int n);
virtual void Goo() = 0;
virtual ~Base() ;
};
class Derived : public Base
{
public:
int Add4Bytes;
void Goo();
int Foo(int n);
};
int Test(Base* b)
{
for (int i=0;i<5;++i)
{
b->Foo(i);
++b;
}
return 0;
}
void Test2(Base arr[])
{
for (int i=0;i<5;++i)
{
arr[i].Foo(i);
}
}
void main
{
Base* b = new Derived[5];
Test(b);
}
所以,當我打電話測試,第二環路之後有一個存儲器侵權行爲中的異常。
我有2個問題:
- 什麼是測試和Test2的函數參數之間的區別? (我把Base變成純粹的抽象類後,Test2不能編譯)。
和更重要的問題
- 如何防止該異常,並且如何傳遞派生類的陣列以一個函數,假設以獲得基類數組。 (我不知道在編譯時間哪個派生類我要通過函數)
ps - 請不要告訴我讀Meyers書,這就是我問這個問題的確切原因。 :)
由於