also erstmal zu deiner zweiten Frage: Das das Programm bei einer falschen Berechnung abbricht ohne eine Ausgabe anzuzeigen, sollte daran liegen, dass bei
Code:
 else 
        std::cout << "Falsch! ";
        std::cin.get();
die geschweiften Klammern fehlen. So sollte es klappen:
Code:
 else 
{
        std::cout << "Falsch! ";
        std::cin.get();
}
Nun zu den Funktionen: Wenn du die Funktion ohne ein cout aufrufst, kann das Ergebnis nicht angezeigt werden, weil ohne cout nun mal keine Ausgaben gemacht werden. Du musst in deinem Beispiel also entweder die Funktion mit cout aufrufen, oder aber in der Funktion selber statt dem return (x+y) schreiben: cout<<x+y. Dann kannst du die Funktion auch ohne cout aufrufen.
Warum dir bei deiner dritten Möglichkeit die Zeilen vertauscht werden, kann ich dir so auf die schnelle aber auch nicht sagen.