Вы можете создавать, изменять и возвращать объект одного и того же класса внутри функции-члена, независимо от того, статичен он или нет.Вот некоторый бессмысленный, но рабочий код, который показывает вам некоторые возможности.
class Train {
public:
int a;
Train(int a) : a(a) {}
static Train addTrain() {
Train t = Train(4);
t.a = 2;
return t;
}
void add(int num) {
Train t = Train(num);
this->a += t.a;
}
}