H
H
I'm trying to wrap my head around inheritance. The following code
creates three objects, an Animal, a Dog and a Cat. Dog and Cat are
derived from Animal and overwrite Animal's birth() method.
I thought, since Dog and Cat are Animals, I can make a vector of Animals
and store Dogs and Cats in it. There's no problem until I try accessing
the elements of the vector, where they are now all treated as Animals.
I suppose this makes sense, since I created a vector of Animals, that
all the elements in it should be treated as Animals. How do I store a
Dog in an Animal vector and retrieve it as a Dog? Can I even do that?
I'm not even sure of the terminology of what I'm trying to do, so my
Google searches haven't been very successful. Even a hint of what to
search for would be helpful.
Thanks,
JamesW.
#include <iostream>
#include <vector>
class animal {
public:
animal(){};
~animal(){};
virtual void birth(){
std::cout << "Gave birth to an animal" << std::endl;
}
};
class dog : public animal {
public:
void birth(){
std::cout << "Gave birth to a puppy" << std::endl;
}
};
class cat : public animal {
public:
void birth(){
std::cout << "Gave birth to a kitten" << std::endl;
}
};
int main()
{
animal thing;
dog max;
cat lucky;
std::vector<animal>list;
list.push_back(thing);
list.push_back(max);
list.push_back(lucky);
for(unsigned char i=0;i< list.size(); i++){
list.birth();
}
return 0;
}
Output::
Gave birth to an animal
Gave birth to an animal
Gave birth to an animal
creates three objects, an Animal, a Dog and a Cat. Dog and Cat are
derived from Animal and overwrite Animal's birth() method.
I thought, since Dog and Cat are Animals, I can make a vector of Animals
and store Dogs and Cats in it. There's no problem until I try accessing
the elements of the vector, where they are now all treated as Animals.
I suppose this makes sense, since I created a vector of Animals, that
all the elements in it should be treated as Animals. How do I store a
Dog in an Animal vector and retrieve it as a Dog? Can I even do that?
I'm not even sure of the terminology of what I'm trying to do, so my
Google searches haven't been very successful. Even a hint of what to
search for would be helpful.
Thanks,
JamesW.
#include <iostream>
#include <vector>
class animal {
public:
animal(){};
~animal(){};
virtual void birth(){
std::cout << "Gave birth to an animal" << std::endl;
}
};
class dog : public animal {
public:
void birth(){
std::cout << "Gave birth to a puppy" << std::endl;
}
};
class cat : public animal {
public:
void birth(){
std::cout << "Gave birth to a kitten" << std::endl;
}
};
int main()
{
animal thing;
dog max;
cat lucky;
std::vector<animal>list;
list.push_back(thing);
list.push_back(max);
list.push_back(lucky);
for(unsigned char i=0;i< list.size(); i++){
list.birth();
}
return 0;
}
Output::
Gave birth to an animal
Gave birth to an animal
Gave birth to an animal