【问题标题】:C++: accessing private members of the class [closed]C ++:访问类的私有成员[关闭]
【发布时间】:2015-12-11 16:35:14
【问题描述】:

由于我是 C++ 新手,我仍然对它有所了解,但我正在尝试扩展一些现有的代码,希望我能够使用 std::vector

在标题中声明了以下内容(为简单起见缩短了):

class WindowManager
{
     private:
        std::vector<Item*>     m_itemlist;
}

我的问题是如何从 .cpp 访问它?我想用它来拥有一个Item 类型的数组,但我不明白如何真正达到可以将新实例化的Item,比如说button 添加到数组的地步?

有点初级的问题,但我对涵盖 std::vector 的教程不太满意。

【问题讨论】:

  • 请详细说明您遇到了什么困难。
  • 您的WindowManager 类需要与向量交互的函数。它就像任何其他私有成员变量一样。
  • 所以问题首先不是关于vector,而是关于“如何更改私有数据成员”?
  • 我认为你把问题简单化了。正如所写,WindowManager class 完全没用,因为它的 m_itemlist 成员不可访问。它只能从成员函数访问,因为它是private,但没有声明成员函数。
  • 旁注:您为什么使用std::vector&lt;Item*&gt; 而不是std::vector&lt;Item&gt;?只要确保你没有做任何不必要的事情——通常不需要指针向量。

标签: c++ private


【解决方案1】:

如果可能,请避免使用指向 Item 的指针向量。直接使用Item的向量。

class WindowManager
{
    void addItem(Item const& item) { m_itemlist.push_back(item); }

private:
    std::vector<Item> m_itemlist;
};

int main()
{
    WindowManager wm;
    Item i;
    wm.addItem(i);
}

【讨论】:

  • 鉴于 OP 要求将 button 添加到 vector,我认为它需要是多态的。但总的来说,你的建议是好的。
  • Item 可能是多态层次结构的基础...
  • @5gon12eder - 你可能是对的。 OP 可能正在寻找指针向量。尽管如此,OP 还是写了I'd like to use it to have an array of Item type...嗯,有点不清楚。无论如何,这个问题现在被搁置,所以我就让它保持原样。
  • @Dennis - 可能是正确的。请参阅上面的评论。
【解决方案2】:

要添加项目,您可以使用如下成员函数:

class WindowManager
{
private:
    std::vector<Item *> m_itemlist;
public:
    void addItem(Item *newItem);
}

在 window_manager.cpp 中:

void WindowManager::addItem(Item *newItem)
{
    m_itemlist.push_back(newItem);
}

std::vector::push_back()

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多