Как выбирать тип значения возвращаемой функции?
Всё очень просто.
Тип функции определяет возвращаемое значение.
Например:
int foo(){
    int i = 7666;
    return i;
}
Функция foo имеет тип int потому, что возвращает значение int;
Так же есть тип void, он используется если функция ничего не возвращает, как-нибудь так:
void increment(int& i) {
    i++;
}
Функция increment получает в аргументы адрес переменной int, затем увеличивает её значение на 1 и ничего не возвращает. поэтому void.
Всё очень просто :)
Если функция в классе и меняет только класс то ее тип void. Дополнительно можете поставить exception при передаче неверных параметров или допустим обрыве связи или недоступности ресурса. 

Если вам прям сейчас нужно значение, то возвращаете его. 

Отдельно стоят статические методы. Они по идее не должны влиять вообще не на что, кроме singleton. Но это отдельный случай, который стоит обыгрывать в конкретном случае. 

Резюмируя. 

Инициализируйте члены в конструкторе. 
Для доступа к состоянию используйте свойства
Возвращайте значения, только если они нужны прям сейчас. 
Статические методы используйте с возвращаемыми значением, и не опирайтесь на значение класса.
Синглтон отдельный случай и его использование нужно хорошо обдумать.