[英]Create a vector of base class objects and store derived class objects within
[英]Store abstract derived class objects in base class 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<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</* What should I put in here? */> interface_vector;
只需將新derived_1
和derived_2
實例derived_2
回通用向量vector<interface*>
就沒有問題,因為它們具有interface
類作為祖先。
順便說一句:您無需從interface
再次繼承derived_1
類和derived_2
類。 這是罕見的,我很確定這可能會導致其他問題。
vector<interface*> interface_vector;
// Loop through abs1 with an index of i
interface_vector.push_back(dynamic_cast<interface*>(abs1[i]));
// Loop through abs2 with an index of i
interface_vector.push_back(dynamic_cast<interface*>(abs2[i]));
只需在上面添加循環即可。 主要的一點是,你可以轉換為interface*
這就是你的vector<interface*>
的期望。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.