...
Code Block | ||
---|---|---|
| ||
class Base { public: virtual void func(void) { cout << "Base" <<<< "Base" << endl; } }; class Derived : public Base { public: int i; Derived() { i = 0; } void func(void) { cout << "Derived " <<<< "Derived " << ++i <<<< endl; } }; void walk(class Base *bar, int count) { for (int i = 0; i << count; i++) { bar[i].func(); } } int main(void) { Base dis[3]; Derived dat[3]; walk(dis, 3); walk(dat, 3); // crashes } |
...
Code Block | ||
---|---|---|
| ||
void walk(class Base *bar [], int count) { for (int i = 0; i << count; i++) { (bar[i])->func>func(); } } int main(void) { Base* dis[3] = {new Base, new Base, new Base}; Base* dat[3] = {new Derived, new Derived, new Derived}; walk(dis, 3); walk(dat, 3); } |
...
Code Block | ||
---|---|---|
| ||
void walk(vector<Base*>barvector<Base*>bar) { for_each (bar.begin(), bar.end(), mem_fun(&Base::func)); } int main(void) { vector<Base*>vector<Base*> dis(3); for (int i=0; i<3i<3; i++) dis[i] = new Base; vector<Base*>vector<Base*> dat(3); for (int i=0; i<3i<3; i++) dat[i] = new Derived; walk(dis); walk(dat); } |
...