2017-04-21 41 views
0

我有2类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的后续元素。访问阵列YY的元素并与它们相互作用 - - 我正在与
1)创建等级Y正确 2)的实例在功能SETY阵列挣扎调用函数func()(我在这里想到的这 - >指针)。

我还是begginner,所以我的问题似乎是显而易见的。

+1

使用'的std ::矢量'构件在'X',不是指针。 – aschepler

+0

只是一个矢量,不是指向矢量的指针?为什么? – chocc

回答

0

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

一种方式来创建Y类的实例的数组是:在功能SETY

const int N = 10; 

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

2) - 访问数组元素yy并与它们进行交互 - 调用函数func()(我在这里考虑this-> pointer)。

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. 
} 
+0

试图接取YY,我并不需要使用这 - > YY [n]的.FUNC(); ? – chocc

+0

@chocc你可以,但在C++'this'里面不需要成员函数。 – Pavel

+0

谢谢,只是最后一个问题:如果我创建yy = new Y [N];像这样,是我定义的构造函数被调用(一个不带参数拍摄)或其他 - 默认(?) - 构造函数,像我的人做这不会改变任何类成员? – chocc