Операция приведения типов С++

283
26 мая 2017, 15:06

Есть два класса A и B как реализовать приведение типов друг в друга?

class A
{
...
    operator B()
    {
        return B(5);
    }
};
class B
{
...
    operator A()
    {
        return A(5);
    }
};

Пробовал писать объявление до определения, не помогает.

Answer 1

В C++ разрешение зависимостей определений классов устроено следующим образом:

Если в некотором месте кода встречается имя класса, то к этому моменту этот класс уже должен быть определён. Есть два варианта определения класса:

  1. class A;
  2. class A { ... }

Определять класс первым способом можно сколько угодно раз, вторым способом только один раз. Второй тип определения более сильный, так как второй тип определения фиксирует структуру класса. В определении второго типа можно опустить реализацию некоторых методов, и написать их позже (считается хорошей практикой писать определение класса в .h файле, а реализацию в соответствующем .cpp файле). Вот хорошая статья на эту тему.

Таким образом, решение может выглядеть следующим образом:

class A;
class B;
class A {
public:
    operator B();
};
class B {
public:
    operator A();
};
A::operator B() {
    return B();
}
B::operator A() {
    return A();
}
int main() {
    A a;
    B b = (B) a;
    A a2 = (A) b;
    return 0;
}
Answer 2

Один класс (выберите по своему вкусу :)) вынести в предварительное объявление, а его использование - после определения класса:

class B;
class A
{
public:
    operator B() const;
};
class B
{
public:
    operator A() const { cout << "B::A()\n"; return A(); }
};
inline A::operator B() const { cout << "A::B()\n"; return B(); }
int main()
{
    A a;
    B b;
    a = b;
    b = a;
}
READ ALSO
Как сделать массив экземпляров класса с полем-мьютексом?

Как сделать массив экземпляров класса с полем-мьютексом?

Есть класс AУ него есть поле Mutex m_mutex; - вопрос: как создать глобальный массив экземпляров класса A, у него есть конструктор, который принимает...

323
Помогите разобраться со строками в с++

Помогите разобраться со строками в с++

Суть задания состоит в том, что есть строка, и нужно вывести её, но слова в которых содержатся более 3х одинаковых букв вывести их '!'причём...

271
Нужна помощ с файлами в с++ [требует правки]

Нужна помощ с файлами в с++ [требует правки]

Элементами файла есть сведения об успеваемостиСколько в группе отличников и двоечников?Количество студентов неограничено

247