C++中容器本质与继承是不太相符的,我们期望使用容器保存因继承而关联的对象,但是对象不是多态的
1. 派生类对象复制到基类对象时,派生类将会倍切掉,只保留派生类的基类部分
2. 没有从基类类型到派生类类型的标准转换
所以当定义保存基类类型的容器保存派生类对象时,派生类对象将被切割掉,只会保存派生类对象的基类部分;
当定义保存派生类类型的容器来保存基类对象时,会失败; 没用从基类类型到派生类类型的转换
eg.
class Human
{
public:
std::string name;
std::string state;
protected:
private:
};
class Woman : public Human
{
public:
unsigned periodDay;
protected:
private:
};
//test code
int main()
{
Human h1;
Woman w1;
std::vector<Human> vec1;
std::vector<Woman> vec2;
vec1.push_back(h1);
vec1.push_back(w1);
vec1[1].name;
//vec1[1].periodDay; //error : has no member named periodDay;
//vec2.push_back(h1); // no conversion for Human to Woman
vec2.push_back(w1);
return 0;
}