【C++】Vector中存储派生类(多个子类继承一个基类)

时间:2025-03-14 17:31:03

(一)问题描述

往vector<基类> push_back了一个派生类对象,现在如何从这个vector中取出这个派生类对象?并且可以使用派生类中的接口函数?

(二)解决方案
1.对象切割(Object slicing)
一般来说,衍生类所占的存储空间一般都比基础类大。当用基础类强制转换派生类物件(对象)指標时就会产生对象切割(Object slicing),即: 把一个派生类对象赋给一个基类对象时或者 用基类对象强制转换派生类对象就会发生对象切割。
2.解决方案: 多态的实现是通过指针和引用
struct Base
{
 virtual void do()
 {
   std::cout << "Base" << std::endl;
 }
};

struct Child1 : public Base
{
 virtual void do()
 {
    std::cout << "Child1" << std::endl;
 }
};


struct Child2 : public Base
{
 virtual void do()
 {
    std::cout << "Child2" << std::endl;
 }
};
std::vector<std::shared_ptr<Base>> c;
std::shared_ptr<Base> obj(new Child1());
c.push_back(obj);
(new Child2());
c.push_back(obj);

for(auto i = (); i ! = (); ++i)
{
  i->do();
}
参考文章: C++ 对象切割(Object slicing )与虚拟函式 [大三TJB_708]_比较普通的程序员的博客-****博客
c++对象切割(Object Slicing)_xd1103121507的博客-****博客_c++ slicing
往vector push_back了一个派生类对象,现在如何从这个vector中取出这个派生类对象?-****论坛