2017-04-21 66 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