gpt4 book ai didi

c++ - 在基类 vector 中存储抽象派生类对象

转载 作者:行者123 更新时间:2023-11-28 04:43:42 24 4
gpt4 key购买 nike

我学会了通过存储基类指针将派生类指针存储在基类 vector 中:

vector<base*> base_vector;
base_vector.push_back(new derived());
// free memory at the end

但是如果我有一个抽象基类:

class interface {
public:
virtual interface(){}
virtual ~interface(){}
};

从中派生了另外两个抽象类。

class abstract_derived_1 : virtual public interface 
{
public:
virtual abstract_derived_1(){}
virtual ~abstract_derived_1(){}
};

class abstract_derived_2 : virtual public interface
{
public:
virtual abstract_derived_2(){}
virtual ~abstract_derived_2(){}
};

以及其他几个从二级抽象类派生的类:

class derived_1 : virtual public interface, virtual public abstract_derived_1
{
private:
double value;
public:
derived_1(){value=0;}
derived_1(const double val1, const double val2) { value = val1+val2; }
~derived_1(){}
};


class derived_2 : virtual public interface, virtual public abstract_derived_2
{
private:
string name;
public:
derived_2(){name="";}
derived_2(string my_str) { name = my_str; }
};

是否可以将它们全部存储在一个多态 vector 中?像往常一样,我做了以下事情:

vector<abstract_derived_1*> abs1;
vector<abstract_derived_2*> abs2;
abs1.push_back(new derived_1(1,2));
abs2.push_back(new derived_2("polymorphism"));

但是如何将两个多态 vector 存储在基类 vector 中呢?

vector</* What should I put in here? */> interface_vector;

最佳答案

push_back derived_1 的新实例没有问题和 derived_2到通用 vector vector<interface*> ,因为他们有 interface类作为祖先。

顺便说一下:你不需要 derived_1类和 derived_2interface 继承的类再次。这是一种不常见的情况,我很确定这可能会导致其他问题。

关于c++ - 在基类 vector 中存储抽象派生类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49708056/

24 4 0
文章推荐: c++ - 通过 setsockopt() 禁用套接字超时
文章推荐: javascript - jQuery Fancybox 不支持 post 方法中的链接
文章推荐: javascript - 在当前 html 表单中插入