кастинг — соревновательный актерский состав / назначение

Если у меня есть 2 класса A а также B и хотите осуществить преобразование из A в BЯ вижу 2 варианта.


class A {
// Some attributes, methods
operator B() const {
// Conversion from A to B
}
}

class B {
// Some attributes, methods
}

class A {
// Some attributes, methods
}

class B {
// Some attributes, methods
B& operator =(const A& src) {
// Conversion from A to B
}
}

Оба эти метода позволяют запустить следующий код:

A instA;
B instB;

instB = instA; // Ok

Теперь давайте представим, что я реализую обе функции (приведение к B в классе A а также operator = от A в классе B:

class A {
// Some attributes, methods
operator B() const {
// Conversion from A to B - Code 1
}
}

class B {
// Some attributes, methods
B& operator =(const A& src) {
// Conversion from A to B - Code 2
}
}

при условии, Код 1 а также Код 2 имеют одинаковый эффект (или даже разные эффекты, почему бы и нет).

Мои вопросы:

  • Если предусмотрены конкурирующие методы приведения / присвоения, какой из них будет выбран первым при выполнении неявного приведения?
  • Есть ли интерес в реализации обоих конкурирующих методов приведения / назначения?
  • Возможно, это даже было бы хорошей идеей, чтобы позвонить operator = класса B в B() оператор приведения класса A?

3

Решение

Если предусмотрены конкурирующие методы приведения / присвоения, какой из них будет выбран первым при выполнении неявного приведения?

Учитывая выбор, operator=() будет дано первое предпочтение, так как он не требует преобразования аргумента RHS.

Есть ли интерес в реализации обоих конкурирующих методов приведения / назначения?

Нет, лучше избегать путаницы.

Возможно, это даже было бы хорошей идеей, чтобы позвонить operator = класса B в B() оператор приведения класса A?

Если вы должны поддерживать оба, тогда, да, было бы неплохо сделать это.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]