Есть два класса A и B как реализовать приведение типов друг в друга?
class A
{
...
operator B()
{
return B(5);
}
};
class B
{
...
operator A()
{
return A(5);
}
};
Пробовал писать объявление до определения, не помогает.
В C++ разрешение зависимостей определений классов устроено следующим образом:
Если в некотором месте кода встречается имя класса, то к этому моменту этот класс уже должен быть определён. Есть два варианта определения класса:
class A;
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;
}
Один класс (выберите по своему вкусу :)) вынести в предварительное объявление, а его использование - после определения класса:
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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть класс AУ него есть поле Mutex m_mutex; - вопрос: как создать глобальный массив экземпляров класса A, у него есть конструктор, который принимает...
Суть задания состоит в том, что есть строка, и нужно вывести её, но слова в которых содержатся более 3х одинаковых букв вывести их '!'причём...
Элементами файла есть сведения об успеваемостиСколько в группе отличников и двоечников?Количество студентов неограничено