I have 2 classes:pointeur à l'aide à la classe de base comme paramètre de tableau
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);
}
Alors, quand je vous appelle test, après la deuxième boucle il une exception viloation mémoire.
J'ai 2 questions:
- Quelle est la différence entre l'argument de la fonction dans le test et Test2? (Test2 ne compile pas après avoir transformé Base en pure classe abstraite).
et plus importante question
- Comment éviter cette exception, et comment puis-je passer un tableau de classe dérivée d'une fonction qui suppose que pour obtenir une base tableau de classe. (Je ne peux pas dire à la compilation quelle classe dérivée je vais passer la fonction)
ps - s'il vous plaît ne me dites pas de lire Meyers livre, c'est la raison exacte pour laquelle je pose cette question . :)
Merci