If this was runtime polymorphism you could write a function:
void foo(Animal& a) {
std::cout << a.color << "\n";
}
And it would print the respective color of the object based on the dynamic type of the parameter. However, there is no such thing as "Runtime-polymorphism based on member variables" in C++. The tutorial is wrong and misleading.
If compile and execute this:
#include <iostream>
using namespace std;
class Animal { // base class declaration.
public:
string color = "Black";
};
class Dog: public Animal // inheriting Animal class.
{
public:
string color = "Grey";
};
void foo(Animal& a) {
std::cout << a.color << "\n";
}
int main(void) {
Dog d= Dog();
Animal d1 = Animal();
foo(d);
foo(d1);
}
The output will be
Black
Black
There is no such thing as virtual member variables. Only for virtual member functions use virtual dispatch:
#include <iostream>
using namespace std;
class Animal { // base class declaration.
public:
virtual std::string color() const { return "Black"; }
};
class Dog: public Animal // inheriting Animal class.
{
public:
std::string color() const override { return "Grey"; }
};
void foo(Animal& a) {
std::cout << a.color() << "\n";
}
int main(void) {
Dog d= Dog();
Animal d1 = Animal();
foo(d);
foo(d1);
}
Output:
Grey
Black
The turial is wrong and misleading when it says that there would be runtime polymorphis with member variables. Moreover the example they present has object slicing. See here: What is object slicing?.