0

我有这个小程序,因为我试图理解作为参数传递的向量和类名。这是程序:

#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(objectclass *p) 中,如果我不想更改定义,我该如何传递值功能。我知道这样的方法:

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

但是我的函数已经定义了,而且我想用ports[i]调用函数vec_try(),所以我不知道如何传递值以及它是如何与ports[i]一起工作的。我基本上需要对此进行一些澄清。

4

1 回答 1

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,依此类推。

如果 in run,你想遍历向量中的所有对象,你可以这样做:

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

如您所见,这将遍历向量中的所有元素(从 0 到ports.size())并调用vec_try每个元素。

使用迭代器有更好的方法来做到这一点,但我将把它留到以后的课程中。

于 2013-03-26T15:37:45.423 回答