friend void operator&(Family a, Family b) { // Marries two family objects
Family A(a.name, a.age, &b);
Family B(b.name, b.age, &a);
a = A;
b = B;
}
вы устанавливаете объекты, которые копируются из переданных аргументов, в параметр.
#include <iostream>
class Family {
public:
Family() {
std::cout << "default ctor\n";
}
Family(const Family &) {
std::cout << "copy ctor\n";
}
};
void foo(Family a) {
std::cout << "address of parameter " << &a << "\n";
}
int main() {
Family f;
std::cout << "address of real object " << &f << "\n";
foo(f);
}
он выводит
default ctor
address of real object 0x7ffee1255928
copy ctor
address of parameter 0x7ffee1255920
Как видите, это разные объекты. Первый объект Family был создан с
Family f;
, после чего мы записываем адрес адреса f и когда мы отправляем в качестве аргумента функцию foo в качестве параметра этого объекта. мы видим, что копирование ctor работает.
friend void operator&(Family &a, Family &b) { // Marries two family objects
Family A(a.name, a.age, &b);
Family B(b.name, b.age, &a);
a = A;
b = B;
}
Вы должны использовать ссылку на значение L, чтобы установить этот объект.