Búsqueda de nombre y alcance de clase

¿Por qué es que el tipo de retorno de setVal es de tipo cadena y el tipo de parámetro es de tipo doble

typedef string Type;
Type initVal(); 
class Exercise {
public:
    typedef double Type;
    Type setVal(Type); 
    Type initVal(); 
private:
    int val;
};

Type Exercise::setVal(Type parm) {  
    val = parm + initVal();    
    return val;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta