Оператор перегрузки = для обмена данными между классами - PullRequest
1 голос
/ 28 сентября 2011

Я хотел бы использовать два класса A и B для некоторых различных типов задач. Но я хочу обменяться некоторыми данными, которые должны быть похожи в обоих случаях, поэтому я хотел бы использовать A = B для примера.

Итак, как это использовать, избегая двустороннего включения в заголовочные файлы?

Пример: в class_a.h:

#include class_b.h
class A {
  private:
    int i;
  public:
    A& operator=(B& const b);
}

class_b.h:

#include class_a.h // won't work here ...
class B {
  private:
    unsigned long n;
  public:
    B& operator=(A& const a);
}

Ответы [ 3 ]

4 голосов
/ 28 сентября 2011

Вы должны заранее объявить другой класс:

class B;
class A {
  private:
    int i;
  public:
    A& operator=(B& const b);
}

Также обратите внимание, что вам, вероятно, следует объявить friend class B; внутри определения A, если у вас нет получателей и вам необходим доступ к B::n.

2 голосов
/ 28 сентября 2011

Вам необходимо использовать предварительную декларацию:

class A;

class B {
  private:
    unsigned long n;
  public:
    B& operator=(A& const a);
}
0 голосов
/ 28 сентября 2011

Не обязательно лучше, но учтите также идею не переопределять назначение, а предоставлять преобразования.

Вы можете сделать как

#include "b.h"
class A
{
public:
    A(const B&);
    operator B() const;
};

Если вы сделаете a=b;, это станет неявноa=A(b) и если вы сделаете b=a;, станет неявно b=a.operator B();

Это все равно, что сказать, что B можно «повысить» до A, а «понизить» до B. Но вы можете делать все вокруг A, не модифицирующий B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...