【发布时间】:2011-01-09 16:48:44
【问题描述】:
我有 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);
}
所以,当我调用 Test 时,在第二个循环之后会出现内存违规异常。
我有两个问题:
- Test 和 Test2 中的函数参数有什么区别? (在我将 Base 转换为纯抽象类后,Test2 无法编译)。
还有更重要的问题
- 如何防止该异常,以及如何将派生类数组传递给假设获取基类数组的函数。 (我无法在编译时告诉我将传递哪个派生类)
p.s - 请不要告诉我读 Meyers 的书,这就是我问这个问题的确切原因。 :)
谢谢
【问题讨论】:
标签: c++ class inheritance pointers polymorphism