我想知道我是否可以将不同类型的非原生数据存储到单个载体中? 它是这样的:
$(".modal-body").modal('show');
如何声明一个向量来保存class foo
{
private:
int x;
public:
foo(int a=0):x(a){}
int getx() { return x; }
void setx(int a=0) { x=a; }
};
class var:public foo
{
private:
int y;
public:
var(int a=0, int b=0):foo(a), y(b){}
int gety() { return y; }
void sety(int a=0) { y=a; }
};
class var1:public foo
{
private:
int z;
public:
var(int a=0, int b=0):foo(a), z(b){}
int getz() { return z; }
void setz(int a=0) { z=a; }
};
和var
类型的数据?
我可以将它们存储在var1
中,然后将它们视为std::vector<foo>
类型
答案 0 :(得分:3)
如果您将foo
的子类型添加到std::vector<foo>
,您将丢失子类型信息。有关详细信息,请参阅What is object slicing?。
std::vector<foo>
容器只能容纳foo
类型的对象。为了能够存储从foo
派生的对象,您必须在堆上分配对象并将指针存储在vector
指针中,最好是智能vector
指针 - std::vector<std::shared_ptr<foo>>
或std::vector<std::unique_ptr<foo>>
。
答案 1 :(得分:1)
您可以使用多态性。因此,不要声明为std::vector<foo>
,而是声明为基类的指针:std::vector<foo*>
。
然后在你的函数中你可以声明为
vector<foo*> bar;
bar.push_back( new var1() );