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

时间:2015-04-19 06:41:45

标签: c++ arrays function pointers

如何使用tabEmployes [0] .Function ???

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;
}

1 个答案:

答案 0 :(得分:1)

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();