Однако я не могу инициализировать x в конструкторе, потому что он имеет то же имя, что и переменная экземпляра. Есть ли способ обойти это (кроме изменения имени аргумента)?
Так измените имя параметра!
class MyClass
{
int x;
public:
MyClass(int xInitVal);
};
MyClass::MyClass(int xInitVal)
:x(xInitVal)
{ // Don't assign x here.
}
Делая имя параметра таким же, как локальное, вы просто затрудняете чтение кода.
Не делай этого. Практически каждое руководство по стилю, с которым вы столкнетесь, скажет вам, чтобы параметры не совпадали с именами членов. Немного здравого смысла, пожалуйста.
Всем людям, которые ответили:
this->x = x;
Не спрашивай меня о работе. Боже мой, вы сознательно пытаетесь вызвать проблемы.
Тот факт, что это выглядит ужасно, не означает, что это плохая идея.
Да, это технически разрешено, но суть в том, чтобы сделать код легким для чтения и поддержки, а не пытаться сделать его экзотическим искусством расшифровки намерений предыдущего автора.