push_back与派生类 [英] push_back with derived class
问题描述
我想创建一个对象数组,我想使用某个构造函数。
I want to create an array of objects and I want to use a certain constructor.
std::vector<Modul> arrDigOut;
arrDigOut.push_back(Modul(IDC_CHECK1, this, "GVL.DigOut1", pAddr));
只要 DigOut
派生类。当我得到它并使用类 DigOut
它失败:
This works as long as DigOut
is not a derived class. When I derive it and use the class DigOut
it fails:
class Modul
{
protected:
int id;
int nErr;
void* plcVar;
bool bDigOut;
PAmsAddr pAddr;
ULONG lHdlVar;
CButton* pBt;
public:
Modul();
//Modul(int ID, Cbeckhoff_frontendDlg* pCbeckhoff,void* pVar,PAmsAddr pAdr)
//{
// SetID(ID,pCbeckhoff);
// plcVar = pVar;
// pAddr = pAdr;
//};
int GetID() { return (id); };
void* GetplcVar() { return plcVar; };
void SetID(int ID, Cbeckhoff_frontendDlg* pCbeckhoff);
int InitCheck(Cbeckhoff_frontendDlg* pCbeckhoff);
CButton* GetpBt(){return pBt;};
void SetButton( Cbeckhoff_frontendDlg* pCbeckhoff);
};
class DigOut : protected Modul
{
public:
DigOut();
DigOut(int ID, Cbeckhoff_frontendDlg* pCbeckhoff,void* pVar,PAmsAddr pAdr)
{
SetID(ID,pCbeckhoff);
plcVar = pVar;
pAddr = pAdr;
};
};
推荐答案
>。你需要有一个指针的向量或智能指针的基类:
That's because of object slicing. You'll need to have a vector of pointers or smart pointers to the base class:
std::vector<Modul*> arrDigOut;
arrDigOut.push_back(new Modul(IDC_CHECK1, this,"GVL.DigOut1",pAddr));
arrDigOut.push_back(new DigOut());
如果不使用智能指针,请记住释放内存。
Remember to free the memory if not using smart pointers.
当你有一个 std :: vector< Modul> arrDigOut;
,并插入一个派生类型的对象,它将被切片并成为一个 Modul
。对象的 Modul
部分被复制到向量中,其余部分丢失。
When you have a std::vector<Modul> arrDigOut;
and you insert on object of a derived type, it will be sliced and becomes a Modul
. The Modul
part of the object is copied in the vector, and the rest is lost.
这篇关于push_back与派生类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!