在指针数组中使用对象中的函数

Using functions from an objet inside an array of pointers

本文关键字:对象 函数 指针 数组      更新时间:2023-10-16

如何使用tabEmployes[0]。函数???

CEmploye **tabEmployes[NB_EMPLOYES] = new CEmploye[NB_EMPLOYES];
int main()
{
for (int i = 0; i < NB_EMPLOYES - 1; i++)
{
int j = 0;
string sNom = *LES_EMPLOYES[i, j];
int iNum = atol(*LES_EMPLOYES[i, j + 1]);
int iNiv = atol(*LES_EMPLOYES[i, j + 2]);
CEmploye* unEmploye = new CEmploye(sNom, iNum, iNiv);
tabEmployes[i] = &unEmploye;
}

tabEmployees是指向指针的指针数组。这意味着tabEmployees[0]是指向指针的指针。要访问类方法,您必须取消引用指针。你可以使用

(*(tabEmployees[0]))->methodName();

但是,当前代码将tabEmployees[0]指向局部变量的内存地址,该地址在循环结束时将超出范围。这是未定义的行为,很可能会导致不希望的结果(例如崩溃,或者所有指针都相同)。

我认为您并不真的希望tabEmployees是一个指向指针的指针数组,尤其是因为您的代码现在不应该编译。

此行:

CEmploye **tabEmployes[NB_EMPLOYES] = new CEmploye[NB_EMPLOYES];

不应该编译,因为您正在将指针数组分配给指针数组。

当你在循环中创建指针时,在我看来你不需要给这个数组赋值。如果您将其更改为:

CEmploye **tabEmployes[NB_EMPLOYES];

现在将编译您的代码。

但是,正如我上面所说的,您仍然存在指向超出范围的局部变量的问题。我建议您的tabEmployees应定义为:

CEmploye *tabEmployes[NB_EMPLOYES];

随后分配为

tabEmployes[i] = unEmploye;

(注意已删除的&)。

现在,数组包含指向新分配对象的指针,而不是指向指向该对象的变量的指针。然后,您可以访问以下方法

tabEmployes[i]->methodName();