您的位置:首页 > 编程语言 > C语言/C++

C++容器与继承

2015-12-30 21:38 471 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: