#include <iostream>
class A {
public:
int value;
};
void callByValueMutate(A* a) {
a->value = 1;
}
void callByReferencePtrAssign(A* &a) {
a = new A;
a->value = 0;
}
int main() {
A* a = new A;
A* b = a;
a->value = 3;
cout << "Initial value A:" << a->value << endl;
cout << "Initial value B:" << b->value << endl;
callByValueMutate(a);
cout << "After call by value A:" << a->value << endl;
cout << "After call by value B:" << b->value << endl;
callByReferencePtrAssign(a);
cout << "After call by reference A:" << a->value << endl;
cout << "After call by reference B:" << b->value << endl;
return 0;
}