gpt4 book ai didi

c++ - 在父类函数中创建子类 - 这可能吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:29 24 4
gpt4 key购买 nike

<分区>

TL;DR; - 我希望能够在父类的函数内创建子类的对象,而无需指定确切的子类。

class CParent 用于在 m_data 中存储一些特定于“版本”的数据。每个 class CChild* 将按照该组内的相同规则操作自己的数据组。

现在我必须在每个 CChild* 类中声明 CParent *replicate(int ver) 但它们是相同的,我认为我可以在仅限父类。

class CParent
{
public:
int m_ver;
std::vector<int> m_data;
CParent(int ver)
{
m_ver = ver;
};
CParent *replicate(int ver) { return nullptr; };
void print(int ver) {
if (m_ver == ver) {
// print m_data
}
else {
CParent *pobj = replicate(ver);
// transfer data from
pobj->print(ver);
delete pobj;
}
}
};

class CChild1 : public CParent
{
public:
void CChild1::operator=(const CChild1& src)
{
// code transfering data from src(ver) to this(m_ver);
};
CChild1(int ver) :CParent(ver)
{
// code specific to CChild1 - m_data contain version depenedent data
};
CParent *replicate(int ver)
{
return new CChild1(ver);
}
};

class CChild2 : public CParent
{
public:
void CChild2::operator=(const CChild2& src)
{
// code transfering data from src(ver) to this(m_ver);
};
CChild2(int ver) :CParent(ver)
{
// code specific to CChild2 - m_data contain version depenedent data
};

CParent *replicate(int ver)
{
return new CChild2(ver);
}
};


int main()
{
int ver = 15;
std::vector<CParent*> vecObjets;
vecObjets.push_back(new CChild1(ver));
vecObjets.push_back(new CChild2(ver));

for (auto it : vecObjets)
it->print(1);

for (auto it : vecObjets)
it->print(7);

for (auto it : vecObjets)
it->print(15);
}

我以为我可以做这样的事情:

CChild* CChild::replicate(int iversion) {
return new<decltype(*this)>(iversion);
};

所以基本上我需要函数来创建从父类调用的子类的拷贝。可以吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com