2013-03-26 45 views
0

我有這個小程序,因爲我想了解向量和作爲參數傳遞的類名。下面是該程序:classname作爲一個對象向量和參數的功能push_back

#include<iostream> 
#include<vector> 
using namespace std; 

class objectclass{ 
public: 
    void vec_try(){ 
     cout<<"print out something"; 
    } 
}; 

class another{ 
public: 
    void run(); 
    vector<objectclass *>ports; 
    void add_obj(objectclass *p){ 
     ports.push_back(p); 
    } 
    }; 

void another::run(){ 
    //int j=0; 
    ports[j]->vec_try(); 
} 
int main(){ 
another a; 
a.run(); 
system("pause"); 
return 0; 
} 

我有想法,通過類名在向量作爲對象是細,然後使用的push_back插入該矢量但在功能add_obj元素(對象類* P)如何傳遞值,如果我不想改變函數的定義。我知道這樣的方式:

objectclass *p; 
p= new objectclass[10]; 

,但我的功能已認定中的,也是我想調用函數vec_try()與港口[I],所以我沒有得到如何通過價值觀和如何正在與港口[我]。我基本上需要澄清一些。

+0

第三次閱讀本文後,我不知道你在問什麼。 – Chad 2013-03-26 15:23:39

+0

我不明白你在問什麼。你能澄清一下嗎?你想要達到什麼目標? – 2013-03-26 15:25:15

+0

我應該在add_obj()中傳遞什麼,因爲它不允許我像add_obj(objectclass * p)或與&p或任何東西,所以我怎麼稱呼這個我的意思是在函數中的參數。 – networks 2013-03-26 15:28:00

回答

1

您的add_obj函數需要指針objectclass對象。所以要添加元素到你的矢量,你需要做的:

another a; 

objectclass obj1; // Create an objectclass 
a.add_obj(&obj1); // Pass its address to add_obj 

objectclass obj2; 
a.add_obj(&obj2); 

objectclass obj3; 
a.add_obj(&obj3); 

當然,你的向量是保持指向這些對象。當這些對象超出範圍並被銷燬時,這些指針將指向無效對象。但這並不重要,因爲你的物體只在main的末尾被銷燬。

另一種方法是動態地分配的對象:

another a; 
a.add_obj(new objectclass()); 
a.add_obj(new objectclass()); 
a.add_obj(new objectclass()); 

每一行動態地分配一個objectclass對象,然後將指針傳遞到該對象add_obj。但是,您需要確保最終delete這個對象以某種方式或另一種方式。

你將push_back插入向量的第一個元素將有索引0,第二個將有索引1,第三個將有索引2,依此類推。

如果run,要遍歷在載體中的所有對象,你可以做這樣的事情:

for (int i = 0; i < ports.size(); i++) { 
    ports[i]->vec_try(); 
} 

正如你所看到的,這個循環遍歷向量的所有元素(從0到ports.size()),並在每一個上調用vec_try

有一個更好的方法來使用迭代器來做到這一點,但我會留給未來的課程。

+0

非常感謝你解決了我的疑惑 – networks 2013-03-26 16:58:20