Functional programming languages have several advantages over imperative languages like C/C++. They support type inference for improved simplicity and readability. Code is more concise due to features like higher-order functions, closures, and partial application. Immutable data structures also improve code quality. Abstract data types (ADTs) allow defining types like shapes that can be pattern matched, similar to object-oriented polymorphism but with advantages like algebraic properties. Functional patterns like chain of responsibility improve modularity.