class foo
{
foo(int x, int y) : x(x), y(y) {}
int x, y;
};
20 Май 2008
Naming arguments in constructors
Кстати, имена аргументов в конструкторе вполне могут совпадать с именами членов:
Подписаться на:
Комментарии к сообщению (Atom)
6 коммент.:
Только в initialization list. Внутри конструктора scope перекрывается, и для обращения к членам приходится использовать this.
С удовольствием давно пользуюсь этим удобным фактом. Более того, можно писать и так:
class foo
{
foo(int x, int y)
{
this->x = x;
this->y = y;
}
int x, y;
};
Можно-то оно конечно можно. Но только это стопроцентный путь на Тёмную сторону.
Cthulhu: Да какая там темная сторона?
для простых конструкторов, состоящих только из списка инициализации - как раз то, что доктор прописал. Чтобы не сидеть и не напрягать мозги как назвать параметры непохоже на мемберов.
Michael: ну да, в списке инициализации, конечно.
raider, навскидку могу назвать 2 потенциальные проблемы:
1. Рефакторинг.
Например, было:
A::A( B * ptr, C * another ) :
ptr( ptr ), another( another )
{}
Стало:
A::A( B * ptr, C * another ) :
ptr( 0 ), another( another )
{
ptr = new B( another );
}
Идея понятна?
2. Методы-мутаторы. Там всё равно придётся морщить моск и придумывать имена параметрам.
Отправить комментарий