检索和编辑向量中对象的私有成员

时间:2011-04-29 18:40:37

标签: c++ object vector private member

我有一些代码可以向向量添加一些对象。然后,我希望从向量中检索特定对象,并能够写出并编辑其私有成员变量。

这是我目前的代码:

class Product {
public:
    Product(int n, const string& na, int p)
            : number(n), name(na), price(p) {};
    void info() const;
private:
    string name;
    int number, price;
};

成员函数如下所示:

void Product::info() const {
    cout << number << ". " << name << " " price << endl;
}

然后我创建一个向量并将其推入一些对象,如下所示:

vector<Product> range;
range.push_back(Product(1, "Bagpipe", 25));

要检索并列出有关所有对象的信息,我有以下功能:

void listProducts (const vector<Product>& range1) {
    for_each (range1.begin(), range1.end(), mem_fun_ref(&Product::info));
}

但这就是我被困住的地方。

解决问题:我不知道如何从矢量中检索单个对象并进行编辑。我需要能够在向量中搜索包含特定数字或名称的对象,并能够检索有关其所有私有成员的信息,并且还能够编辑所有成员。

我对解决方案的看法是:

  • 创建其他成员函数 可以归还个人会员

  • 创建函数,类似于我上面已有的函数,可以搜索向量中的每个对象,并使用这些附加成员函数的返回值来与我正在寻找的内容进行比较

  • 我不太清楚如何编辑对象私有成员,但我目前的猜测是,我还需要成员函数,以及与之相关的函数

任何帮助将不胜感激!甚至模糊的推动正确的方向!

4 个答案:

答案 0 :(得分:2)

如果成员变量是私有的,那么根据定义,您无法从外部世界访问它们!您需要执行以下操作之一:

  • 将其更改为public
  • 访问者功能添加到班级(即int MyClass::getFoo() constvoid MyClass::setFoo(int))。
  • 让您的函数成为该类的friend

这与存储在vector中无关。

答案 1 :(得分:1)

您可以使用std:find_if根据您希望的任何条件查找向量中的项目。

然后,您可以向Product添加公共接口,以便根据需要更新其状态。请注意,此接口不必是直接“将此项设置为此值”映射。

答案 2 :(得分:0)

带有每个可搜索字段索引的

Boost.MultiIndex可能比使用vector和您自己的搜索代码更容易。

  

Boost多指数容器   库提供了一个类模板   名为multi_index_container的   能够建造集装箱   保持一个或多个指数   不同的排序和访问   语义。指数提供接口   类似于STL容器,   使用他们熟悉。该   多索引的概念   相同的元素集合是   借用关系数据库   术语和允许的   复杂数据的规范   结构本着繁衍的精神   索引关系表,简单   集合和地图是不够的。一个广泛的   提供指数选择,   以类似的STL容器为模型   比如std :: set,std :: list和hashed   集。

我还在其他答案中回应关于私人会员访问的评论。

答案 3 :(得分:0)

您需要为Product类提供允许更改Product属性的成员函数,或者更好地将向量中的Product对象替换为编辑现有对象的结果,但为此,您需要提供访问器函数,或您的Product类中的合适构造函数。