【问题标题】:Should I return a member vector by reference when I need to modify them in other place?当我需要在其他地方修改成员向量时,是否应该通过引用返回成员向量?
【发布时间】:2017-11-04 09:15:27
【问题描述】:

在下面的代码中,B中的方法会修改A的成员向量。为了实现它,我通过引用返回向量。还有其他更好的做法吗?

class A {
 public:
  vector<int> &GetData() { return data_; }
 private:
  vector<int> data_;
};

class B {
 public:
  void Method(A *a) {
    vector<int> &data = a->GetData();
    data[0] = 0;
    data[1] = 0;
    data[2] = 0;
  }
};

【问题讨论】:

  • 惯用的方式是public: std::vector&lt;int&gt; data;。您的方法没有封装优势和过度设计的劣势。
  • “什么是惯用方式”往往是“主要基于意见”,因此偏离主题。尝试以一种可能的最佳答案并且可以客观地判断的方式重新表述它。
  • 要问自己一个问题是为什么Method 是B 的一部分而不是A 的成员。
  • @BoPersson:他们的职责并不相同或密切相关。

标签: c++ oop refactoring


【解决方案1】:

你可以通过多种方式做到这一点,但没有标准的方法。

你可以照你说的做,或者公开会员:

class A {
public:
 std::vector<int> data_;
};

class B {
public:
void Method(A* a) {
  a->data_[0] = 0;
  (...)
};

你也可以让B成为A的朋友类,然后将data_设为私有,像这样:

class A {
private:
 friend class B;

 std::vector<int> data_;
};

class B {
public:
void Method(A* a) {
  a->data_[0] = 0;
  (...)
};

这真的取决于你将如何使用data_ 成员。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2021-08-29
    • 2014-12-19
    • 1970-01-01
    • 2014-12-13
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多