c++ - 类名作为 vector 的对象和 push_back 函数的参数

标签 c++ class vector

我有这个小程序,因为我试图理解作为参数传递的 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/

相关文章:

时间:2019-03-17 标签:c++: Defferentiate templates in an if statement

c++ - 使用 QHash 和 QList 提高性能

c++ - 是否可以使用 LD_PRELOAD 覆盖 main 方法?

c++ - 将许多 vector 排序在一起

c++ - 函数退出后 vector 数据消失

javascript - Typescript:基于类创建接口(interface)

c++ - vector 的最小值显示为 0

c++ - openCV中的小波变换

c++ - 映射/迭代器增量错误

c++ - 一个快速的 C++ 查询