C++ 类名作为向量的对象,参数作为函数的参数,以向后推_

C++ 类名作为向量的对象,参数作为函数的参数,以向后推_,c++,class,vector,C++,Class,Vector,我有这个小程序,因为我试图理解向量和作为参数传递的类名。节目如下: #include<iostream> #include<vector> using namespace std; class objectclass{ public: void vec_try(){ cout<<"print out something"; } }; class another{ public: void run(); vec

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

#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;
}

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

您的
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
。但是,您需要确保最终以某种方式删除此对象

将推回到向量中的第一个元素的索引为0,第二个元素的索引为1,第三个元素的索引为2,依此类推

如果在
run
中,您希望迭代向量中的所有对象,可以执行以下操作:

objectclass *p;
p= new objectclass[10]; 
for (int i = 0; i < ports.size(); i++) {
  ports[i]->vec_try();
}
for(int i=0;ivec_try();
}
如您所见,这将遍历向量中的所有元素(从0到
ports.size()
),并对每个元素调用
vec\u try


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

在第三次阅读这篇文章之后,我不知道你在问什么。我不明白你在问什么。你能澄清一下吗?你想实现什么?我应该在add_obj()中传递什么,因为它不允许像add_obj(objectclass*p)或with&p之类的东西,所以我如何在函数中调用这个我是说参数。我正在尝试像这样调用函数ports[j]->vec_try();但是首先我需要在端口[j]中添加一些东西,我想在端口[j]中添加一些东西。怎样??