I'm wondering how polymorphism works with objects instead of pointers. I wrote the following example:
This code:
#include <iostream>
#include <vector>
class Base {
public:
virtual void ToString() {
std::cout << "Base" << std::endl;
};
};
class DerivedA : public Base {
public:
void ToString() final {
std::cout << "DerivedA" << std::endl;
}
};
class DerivedB : public Base {
public:
void ToString() final {
std::cout << "DerivedB" << std::endl;
}
};
int main(int argc, char **argv) {
std::vector<Base> v;
v.push_back(DerivedA());
v.push_back(DerivedB());
v[0].ToString();
v[1].ToString();
return 0;
}
Show this output:
Base
Base
While:
int main(int argc, char **argv) {
std::vector<Base*> v;
v.push_back(new DerivedA());
v.push_back(new DerivedB());
v[0]->ToString();
v[1]->ToString();
return 0;
}
Shows this:
DerivedA
DerivedB
Why in the first example is calling the base method while the second one calls the derived ones?