2011-09-28 2 views
1

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

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

Пример: в 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); 
} 
+0

Почему они должны быть в разных файлах заголовков? – mkb

ответ

4

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

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

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

2

Вы должны использовать опережающее объявление:

class A; 

class B { 
    private: 
    unsigned long n; 
    public: 
    B& operator=(A& const a); 
} 
0

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

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

#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.

Смежные вопросы