在类函数中访问数组类成员

时间:2017-04-21 23:38:19

标签: c++ arrays class pointers this

我有两个类Y,X。我想创建一个X类成员,它是一个Y类实例的数组。

class Y 
{
public:
    Y();
    ~Y();  
    void func();
    int n;
};

我在某个地方读到了我应该使用指针(可能指向指针数组的指针?),以便能够与这些数据进行交互。

class X 
{
public:
    X();
    ~X();      
    void setY(int n);
    Y *yy; 
};

所以我尝试在类X中创建一个函数setY来处理添加数组yy的后续元素。我正在挣扎着 1)正确创建类Y的实例数组 2)在函数setY中 - 访问数组yy的元素并与它们交互 - 调用函数func()(我在考虑这个 - >指针)。

我仍然是一个乞丐,所以我的问题似乎很明显。

1 个答案:

答案 0 :(得分:0)

  

1)正确创建Y类实例数组

创建Y类实例数组的一种方法是:

const int N = 10;

X::X()
{
    yy = new Y[N]; // create array of 10 instances of class Y.
}
  

2)在函数setY中 - 访问数组yy的元素并与它们交互 - 调用函数func()(我在考虑这个 - >指针)。

void X::setY(int n)
{
    assert(n < N); // check that n is less than N (10)
    yy[n].func(); // access n-th element.
}

但是,有更好的方法,例如,使用std::vector

#include <vector>

class X
{
public:
    X();
    ~X();
    void setY(int n);
    std::vector<Y> yy; 
};

X::X() : yy(N) // create std::vector of 10 instances of class Y.
{
}

void X::setY(int n)
{
    yy[n].func(); // access n-th element.
}

如果您的class X只包含固定数量的Y实例,您可以将其简化为:

class X
{
public:
    X();
    ~X();
    void setY(int n);
    Y[10] yy; 
};

X::X()
{
}

void X::setY(int n)
{
    yy[n].func(); // access n-th element.
}