Они называются Named Constructors
.
В основном используются, когда вы хотите построить объект, который требует передачи определенного набора параметров, но внутренне вам нужно построить объект по-разному.
Например у вас есть класс, как:
class AREA
{
double area;
AREA(int x);
};
//how will you construct the object differently in case of circle and square??
Для этой цели мы назвали конструкторы, которые помогают создать соответствующий объект.
Таким образом, мы можем создать 2 статические методы внутри класса, как:
static AREA square(int x)
{ return AREA(x*x); }
и
static AREA circle(int x)
{ return AREA(x*x*3.14); } //or a more accurate PI value
Таким образом, мы можем назвать соответствующую статическую функцию, чтобы вернуть объект инициализирован с требуемой области.
ПРИМЕЧАНИЕ: Они являются статическими, поскольку при создании объекта для определенного класса вы не должны требовать от него объекта.
THIS для получения более подробной информации.
Для конкретного примера я использовал его в классе 'Duration':' Duration :: Days', 'Duration :: Hours',' Duration :: Minutes' ... все принимают тот же аргумент, и это дает понять, какой должна быть его единица при получении. –
Также полезно использовать 'enable_shared_from_this'. http://mortoray.com/2013/08/02/safely-using-enable_shared_from_this/ –