c++ 将常量指针赋给指针

xxls0lw8  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(221)

我有一个worker类,每个worker都有一个指针数组,指向同时也是worker的同事。
我想重载+=运算符,以便能够执行以下操作:* 工人1 += * 工人2。
此操作将把worker2添加到worker1的同事数组中,并把worker1添加到worker2的同事数组中。(worker1、worker2是指针)。
相关的Worker类结构:

class Worker{
private:
Worker** coWorkers
}

我尝试实现的函数:

const Worker& Worker::operator+=(const Worker& other){

}

问题是“其他人”是const,但“同事”不是const,所以我无法执行以下操作:

this->coWorkers[last] = &other;

我怎样才能解决这个问题?

whlutmcx

whlutmcx1#

首先,现代C++使用std::vectorstd::list代替Worker** coWorkers。我认为在您的情况下,首选列表,因为您不知道初始化期间同事的确切数量,以及容器,即同事列表可以及时更改,即添加新同事和轮换某人,切换公司等。
您可以将员工推回到列表中,如下例所示:

#include <list>
#include <string>
#include <iostream>

class Worker {
public:
  typedef std::list< Worker >::const_iterator const_iterator;
  explicit Worker(const std::string& name):
    name_(name)
  {}
  Worker& operator+=(const Worker& coWorker)
  {
    coWorkers_.push_back(coWorker);
    return *this;  
  }
  const_iterator begin() const {
    return coWorkers_.cbegin();
  }
  const_iterator end() const {
    return coWorkers_.cend();
  }
  const std::string& name() const {
    return name_;
  }
private:
  std::string name_;
  std::list< Worker > coWorkers_;
};

int main(int argc, const char** argv) 
{    
  Worker boss("Cesar");
  boss += Worker("Augustus");
  boss += Worker("Antonius");
  boss += Worker("Brutus");

  std::cout << boss.name() << std::endl; 
  for(auto i: boss) {
    std::cout << i.name() << std::endl; 
  }
}

检查output

相关问题