Pongo un ejemplo:
#include<iostream>
using namespace std;
int funcionPromedio(int nota1,int nota2,int nota3){
int promedio = (nota1 + nota2 + nota3)/3;
return promedio;
}
int main(){
int resultado;
resultado = funcionPromedio(5,9,4);
cout << resultado;
return 0;
}
En la linea 4 hay una función "funcionPromedio", antes del nombre dice "int" quiere decir que lo que va a devolver es de tipo "int" (que es la variable "promedio").
En la linea 13 lo que haces es "ASIGNAR a la variable resultado, lo que nos retorna la funcionPromedio". La parte que dice (5,9,4) es lo que le vas a "mandar" a la funcion, son 3 valores por que son 3 parametros nota1 nota2 nota3. Con esto lo que haces es prácticamente nota1=5, nota2=9, nota3=4, promedio=(5+9+4)/3, promedio=6, return 6. Con este return es como si la función te dijera "toma esta es la respuesta". Luego queda resultado = 6.
En esta función si le pasas 3,5,6 la suma es 4,666 pero como están como enteros(int) te devolverá solo la parte entera: 4 (Ojo: no redondea a máximo o a mínimo). Si quieres con decimales tendrías que cambiar los tipos de datos a float o double.
--
*No es necesario que los parametros tengan el mismo tipo q el valor de retorno. Puede existir una función algo así "int funcionX(float a, String texto, bool bandera)" , incluso podría no tener parámetros.