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;
}
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;
}
相关文章推荐
- C++11新特性应用--让你的程序更简洁、更漂亮
- C++11新特性应用--让你的程序更简洁、更漂亮
- C语言的判断语句
- c++多个源文件共用一个全局变量(extern 的用法)
- C++-字符串操作
- C++-类的理解
- 字符串String MD5计算小工具 VC++篇 VS2008工程
- C语言中的自定义函数
- 学生管理系统(c版)
- 自己使用 1.C语言历史以及特点。
- C++计时
- 黑马程序员-OC语言-多态、代理
- C++Builder生成的EXE如何在别的电脑上正常运行
- 字符串最后一个单词的长度
- C语言冒泡排序法和函数stoi()数字字符串转化的问题
- C++对10个数选择排序的2个问题分享
- C++编程思想学习笔记---第15章 多态性和虚函数
- VC++获取程序运行路径
- UNICODE GBK UTF-8 编码互转(VC++)
- VC++6.0显示cannot compile the file***:no compile tool is associated with the file extension.