我有这个小程序,因为我试图理解作为参数传递的 vector 和类名。这是程序:
#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;
}
我知道将类名作为对象传递到 vector 中很好,然后使用 push_back 将元素插入该 vector 中,但是在函数 add_obj(objectclass *p) 中,如果我不想更改值,我该如何传递值函数的定义。我知道这样的方式:
objectclass *p;
p= new objectclass[10];
但是我的函数已经定义了,而且我想用 ports[i] 调用函数 vec_try() 所以我不知道如何传递值以及它如何与 ports[i] 一起工作。我基本上需要对此进行一些澄清。
最佳答案
您的add_obj
函数接受指向objectclass
对象的指针。因此,要将元素添加到 vector 中,您需要执行以下操作:
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);
当然,您的 vector 会保留指向这些对象的指针。当这些对象超出范围并被销毁时,这些指针将指向无效对象。但这在这里并不重要,因为您的对象只会在 main
结束时被销毁。
另一种方法是动态分配您的对象:
another a;
a.add_obj(new objectclass());
a.add_obj(new objectclass());
a.add_obj(new objectclass());
每一行动态分配一个objectclass
对象,然后将指向该对象的指针传递给add_obj
。但是,您需要确保最终以某种方式删除
此对象。
push_back
到 vector 中的第一个元素的索引为 0,第二个元素的索引为 1,第三个元素的索引为 2,依此类推。
如果在 run
中,你想遍历 vector 中的所有对象,你可以这样做:
for (int i = 0; i < ports.size(); i++) {
ports[i]->vec_try();
}
如您所见,这会循环遍历 vector 中的所有元素(从 0 到 ports.size()
)并在每个元素上调用 vec_try
。
使用迭代器有更好的方法,但我会把它留到以后的类(class)中。
关于c++ - 类名作为 vector 的对象和 push_back 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640790/